【问题标题】:EBNF for simple conditionsEBNF 用于简单条件
【发布时间】:2015-04-15 12:10:59
【问题描述】:

我正在尝试为类似于 if 语句测试中的条件语句的简单表达式编写 EBNF 规范,例如:aaa = "xxx"aaa != "xxx" AND bbb = "yyy" 或更复杂的括号,如 aaa = "xxx" AND bbb = "yyy" AND ( ccc = "zzz" OR ddd = "www" )

到目前为止我提出的规范是这样的,我的问题是 - 它是否正确?

<cond> ::= <id> <rel_op> <value>
    | <cond> <op> <cond>
    | "(" <cond> ")"

<op> ::= AND
    | OR

<rel_op> ::= "=" 
    | "!="

<value> ::= <quot> <char>* <quot>

<quot> ::= "

旁注 - 我是 E/BNF 的新手,并计划根据此规范在 C# 中实现解析器,以替换像意大利面条一样臭的旧解析器。

【问题讨论】:

    标签: bnf ebnf


    【解决方案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> := "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多