什么是yacc中的EBNF分组

时间:2018-02-05 22:32:00

标签: bison flex-lexer yacc ebnf

我正在用lex / yacc编写程序语法。我有一个关于语法模糊的问题,我需要看看EBNF语法。当我搜索yacc及其声明的语义时,我看到分组( {.....} ),但我不知道如何初始化它。例如,选项( [.....] )使用 | 进行初始化。

%token PROGRAM ID SEMICOLON
    program: 
             PROGRAM ID SEMICOLON
             | PROGRAM ‘,’ ID SEMICOLON

有什么方法可以分组吗?

1 个答案:

答案 0 :(得分:0)

yacc不支持EBNF,因此您需要将EBNF运算符转换为简单的BNF以在yacc中使用。通常,每个这样的运营商都需要引入新的符号。所以

[ ... ]

成为<new-symbol>
<new-symbol> ::= ε | ...

{ ... }变为<new-symbol> 1

<new-symbol> ::= ε | <new-symbol> ...

( ... )

成为<new-symbo>
<new-symbol> ::= ...

1 如果......中有任何|运算符,则需要在此替换中的每个<new-symbol>之后插入