我希望BNF,EBNF,正则表达式和lex语法识别以下内容: 字符串必须以A,B,C,D或E之一开头,然后按照A,B,C,D,E,0,1,2,3,_的数量开始,你也可以有1或者0的符号$。
到目前为止,我做了:
正则表达式
[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
有疑问答案 0 :(得分:1)
有一些问题。参考BNF and EBNF: What are they and how do they work?(第一个可用的网络点击之一 - 没有引用的变体,很难提供具体建议......):
rest1
的行看起来很奇怪(你的意思是使用rest
重复吗?)[symbol]
那样使用方括号。相反,他使用*
和?
(如正则表达式中那样)。 ---希望有所帮助