以下BNF,EBNF,正则表达式和Lex语法是否正确?

时间:2015-03-18 14:05:33

标签: regex lex bnf ebnf

我希望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

有疑问

1 个答案:

答案 0 :(得分:1)

有一些问题。参考BNF and EBNF: What are they and how do they work?(第一个可用的网络点击之一 - 没有引用的变体,很难提供具体建议......):

  • 正则表达式和lex不同意:你使用“^”来锚定后者,而不是前者。 lex支持交替“|”在正则表达式中的括号内组中。
  • 在BNF中,定义rest1的行看起来很奇怪(你的意思是使用rest重复吗?)
  • Garshol的页面不像您在EBNF中对[symbol]那样使用方括号。相反,他使用*?(如正则表达式中那样)。
  • BNF或EBNF均未显示使用数字0-9
  • 实际上,正则表达式使用0-9,但问题陈述是0-3

---希望有所帮助