我正在用LEX/YACC编写程序语法。我有一个关于语法歧义的问题,我需要看一下EBNF语法。当我搜索YACC及其声明的语义时,我会看到分组( {.....} (,但我不知道如何初始化它。例如选项( [.....] (以 | 。
初始化%token PROGRAM ID SEMICOLON
program:
PROGRAM ID SEMICOLON
| PROGRAM ‘,’ ID SEMICOLON
有什么办法进行分组?
yacc不支持EBNF,因此您需要将EBNF运算符转换为简单的BNF以在YACC中使用。通常,每个此类操作员都需要引入一个新符号。所以
[
... ]
与
<new-symbol>
<new-symbol> ::= ε | ...
{
... }
与 1
<new-symbol>
<new-symbol> ::= ε | <new-symbol> ...
(
... )
变成
<new-symbo>
<new-symbol> ::= ...
1 如果...中有任何|
操作员,您需要在此替换中插入<new-symbol>