YACC中的EBNF分组是什么



我正在用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>

最新更新