2015-03-18 2 views
-1

Je souhaite que BNF, EBNF, l'expression régulière et la syntaxe lex reconnaissent ce qui suit: La chaîne doit commencer par l'une de A, B, C, D ou E suivie de autant que vous le souhaitez de A, B, C , D, E, 0,1,2,3, _ vous pouvez aussi avoir 1 ou 0 du symbole $.Les expressions BNF, EBNF, Regular et Lex sont-elles correctes?

Jusqu'à présent, je fait:

expression régulière

[A-E]([A-E0-9_]*[$]?[A-E0-9_]*) 

BNF

<S>::= <letter><Rest> 
<Rest>::=<rest1><symbol>|<rest1><symbol><rest1>|<symbol><rest1>|<rest1>|<symbol> 
<rest1>::=<character><rest1>|<rest1><character>|<character> 
<character>::=A|B|C|D|E|1|2|3|4|_ 
<letter>::=A|B|C|D|E 
<symbol>::=$ 

EBNF

S=letter{character}[symbol]{character} 
letter=|"A"|"B"|"C"|"D"|"E"| 
character=|"1"|"2"|"3"|"4"|"A"|"B"|"C"|"D"|"E"|"_" 
symbol="$" 

lex

^[A-E][A-E0-3_]*[$]?[A-E0-3_]*$ 

Sont-ils corrects? L'expression régulière est 100% correcte Je pense avoir mes doutes sur ebnf, bnf et lex

Répondre

1

Il y a quelques problèmes. Se référant à BNF and EBNF: What are they and how do they work? (un des premiers web-hits utilisables - sans variation cité, il est difficile d'offrir des conseils spécifiques ...):

  • l'expression régulière et lex en désaccord: vous utilisez «^» pour ancrer ce dernier, mais pas le premier. lex supporte l'alternance "|" dans un groupe entre parenthèses que vous avez dans l'expression régulière.
  • dans la BNF, la ligne définissant rest1 semble étrange (avez-vous dire à se reproduire en utilisant rest?)
  • la page de Garshol ne pas utiliser des crochets comme vous l'avez fait pour [symbol] dans le EBNF. Au contraire, il utilise * et ? (comme dans les expressions régulières).
  • ni la BNF ou EBNF montrent l'utilisation de chiffres 0-9
  • En fait, l'expression régulière utilise 0-9, mais l'énoncé du problème est 0-3

--- espoir qui aide