2015-04-15 5 views
0

Я пытаюсь написать спецификацию EBNF для простого выражения условия утверждений аналогично тому, что в случае испытаний заявления, например: aaa = "xxx" или aaa != "xxx" AND bbb = "yyy" или более сложного со скобками, как aaa = "xxx" AND bbb = "yyy" AND (ccc = "zzz" OR ddd = "www")EBNF для простых условий

The spec, я до сих пор придумал это, и мой вопрос - это правильно?

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

<op> ::= AND 
    | OR 

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

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

<quot> ::= " 

Побочное примечание - я новичок в E/BNF и планирование по реализации синтаксического анализатора в C# на основе этой спецификации, чтобы заменить старый анализатор, который как спагетти и воняет.

ответ

0

Это то, что я придумал, а также успешно реализован:

<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> := " 

 Смежные вопросы

  • Нет связанных вопросов^_^