Я хочу, чтобы BNF, EBNF, регулярное выражение и синтаксис lex распознавали следующее: Строка должна начинаться с одного из A, B, C, D или E, за которым следует столько же, сколько вам нравится в A, B, C , D, E, 0,1,2,3, _ вы также можете иметь 1 или 0 символа $.Являются ли следующие BNF, EBNF, регулярные выражения и синтаксис Lex правильными?
До сих пор я сделал:
регулярное выражение
[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="$"
Лекса
^[A-E][A-E0-3_]*[$]?[A-E0-3_]*$
Правильны ли они? Регулярное выражение на 100% правильное. Я думаю, что у меня есть сомнения относительно ebnf, bnf и lex