我正在使用Flex / Bison和VHDL 93.我遇到以下规则的问题:
choices ::= choice { | choice }
如果我将其转换为BNF:
N1 ::= %empty | choice
N2 ::= %empty | N2 N1
choices ::= choice N2
choices ::= choice | choice N2 N1
choices ::= choice | choices N1
choices ::= choice | choices | choices choice
但是选择:最终选择是无用的
choices ::= choice | choices choice
那么,问题是什么?好吧,想象一下转换的规则是:
choices ::= choice { choice }
我将规则应用于转换为BNF:
N1 ::= choice
N2 ::= %empty | N2 N1
choices ::= choice N2
choices ::= choice | choice N2 N1
choices ::= choice | choices N1
choices ::= choice | choices choice
以前的结果是一样的!!!会发生什么?问题出在哪儿?我在一年多前遇到过这个规则的问题,我在这个项目中再次工作,我的选择问题仍然存在:P
这是VHDL 93标准关于选择的内容:
在第二种情况下,“选择”可以由“选择”列表替换,由竖线分隔。
我不知道','来自哪里。
谢谢。
VHDL描述非常清楚:您需要一个由垂直条分隔的choice
列表。 EBNF可能令人困惑,因为垂直条可能被误解为EBNF运算符。但从描述中可以看出,它实际上是一种象征。
所以,在bison / yacc语法中:
choices: choice
| choices '|' choice