gpt4 book ai didi

grammar - Bison:单个规则中的可选标记

转载 作者:行者123 更新时间:2023-12-04 00:59:33 25 4
gpt4 key购买 nike

我正在使用 GNU Bison 2.4.2 为我正在研究的新语言编写语法,我有一个问题。
当我指定规则时,让我们说:

statement : T_CLASS T_IDENT  '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}

例如,如果我对规则有变化
statement : T_CLASS T_IDENT T_EXTENDS T_IDENT_LIST  '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}

哪里(来自 flex 扫描仪规则):
"class"                     return T_CLASS;
"extends" return T_EXTENDS;
[a-zA-Z\_][a-zA-Z0-9\_]* return T_IDENT;

(并且 T_IDENT_LIST 是逗号分隔标识符的规则)。

有没有办法只在一个规则中指定所有这些,以某种方式将“T_EXTENDS T_IDENT_LIST”设置为可选?
我已经尝试过
 T_CLASS T_IDENT (T_EXTENDS T_IDENT_LIST)? '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}

但是 Bison 给了我一个错误。

谢谢

最佳答案

长话短说,不。 Bison 只处理 LALR(1) 语法,这意味着它只使用一个前瞻符号。你需要的是这样的:

statement: T_CLASS T_IDENT extension_list '{' ...

extension_list:
| T_EXTENDS T_IDENT_LIST
;

不过,还有其他解析器生成器可以处理更通用的语法。如果没记错的话,其中一些像您要求的那样相对直接地支持可选元素。

关于grammar - Bison:单个规则中的可选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com