我正在尝试为if语句测试中的条件语句的简单表达式编写EBNF规范,例如:aaa = "xxx"
或aaa != "xxx" AND bbb = "yyy"
或更复杂的括号,如{{ 1}}
到目前为止我提出的规范是这个,而我的问题是 - 这是正确的吗?
aaa = "xxx" AND bbb = "yyy" AND ( ccc = "zzz" OR ddd = "www" )
旁注 - 我是E / BNF的新手,并计划在C#中基于此规范实现解析器,以替换类似意大利面条和臭味的旧解析器。
答案 0 :(得分:1)
这就是我提出的,并且也成功实施了:
<cond> := <rel_cond> {<op> <cond>}
| <parenth_cond> {<op> <cond>}
<rel_cond> := <id> <rel_op> <value>
<rel_op> := "=" | "!=" | "~" | "!~"
<parenth_cond> := "(" <cond> ")"
<op> := AND | OR
<id> := <char>*
<value> := <quot> <char>* <quot>
<quot> := "