yacc中的EBNF分组是什么
What is the EBNF grouping in yacc
我正在用 lex/yacc 编写程序语法。我有一个关于语法歧义的问题,我需要查看 EBNF 语法。当我搜索 yacc 的语义及其声明时,我看到了 grouping({.....}) 但我不知道如何初始化它。例如 options([.....]) 初始化为 |.
%token PROGRAM ID SEMICOLON
program:
PROGRAM ID SEMICOLON
| PROGRAM ‘,’ ID SEMICOLON
有什么方法可以这样分组吗?
yacc 不支持EBNF,所以需要将EBNF 操作符转换为简单的BNF 才能在yacc 中使用。一般来说,每个这样的运营商都需要引入一个新的符号。所以
[
...]
变成 <new-symbol>
和
<new-symbol> ::= ε | ...
{
...}
变成 <new-symbol>
with1
<new-symbol> ::= ε | <new-symbol> ...
(
...)
变成 <new-symbo>
和
<new-symbol> ::= ...
1如果...中有任何|
运算符,则需要在每个运算符后插入<new-symbol>
替换
我正在用 lex/yacc 编写程序语法。我有一个关于语法歧义的问题,我需要查看 EBNF 语法。当我搜索 yacc 的语义及其声明时,我看到了 grouping({.....}) 但我不知道如何初始化它。例如 options([.....]) 初始化为 |.
%token PROGRAM ID SEMICOLON
program:
PROGRAM ID SEMICOLON
| PROGRAM ‘,’ ID SEMICOLON
有什么方法可以这样分组吗?
yacc 不支持EBNF,所以需要将EBNF 操作符转换为简单的BNF 才能在yacc 中使用。一般来说,每个这样的运营商都需要引入一个新的符号。所以
[
...]
变成 <new-symbol>
和
<new-symbol> ::= ε | ...
{
...}
变成 <new-symbol>
with1
<new-symbol> ::= ε | <new-symbol> ...
(
...)
变成 <new-symbo>
和
<new-symbol> ::= ...
1如果...中有任何|
运算符,则需要在每个运算符后插入<new-symbol>
替换