我正在用lex / yacc编写程序语法。我有一个关于语法模糊的问题,我需要看看EBNF语法。当我搜索yacc及其声明的语义时,我看到分组( {.....} ),但我不知道如何初始化它。例如,选项( [.....] )使用 | 进行初始化。
%token PROGRAM ID SEMICOLON
program:
PROGRAM ID SEMICOLON
| PROGRAM ‘,’ ID SEMICOLON
有什么方法可以分组吗?
答案 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>
之后插入