gpt4 book ai didi

bison - 规则永远不会减少,理解为什么

转载 作者:行者123 更新时间:2023-12-05 00:22:09 25 4
gpt4 key购买 nike

我正在学习与 YACC 合作,我真的无法理解一些错误。我想知道为什么当我尝试使用 .y 文件生成解析器时会出现此错误。这是我的 .y 文件,它代表 Pascal 语言的上下文无关语法:

%%


Program : program ident ';' declaration_opc compound_stmt '.'
;

declaration_opc : var declaration_list
|
;

declaration_list : declaration ';' declaration_list
| declaration ';'
;

declaration : id_list ':' type
;

id_list : ident
| ident ',' id_list
;

type : integer
| BOOLEAN
;

proc_dec : proc_header forward ';'
| proc_header declaration_list compound_stmt
| func_header forward ';'
| func_header declaration_list compound_stmt
;

proc_header : procedure ident parametros ';'
;

func_header : function ident parametros : type
;

parametros : '(' param_list ')'
|
;

param_list : arg
| arg ';' param_list
;

arg : id_list ':' type
| var id_list ':' type
;

compound_stmt : begin statement_list end
;

statement_list : statement ';' statement_list
| statement
;

statement : ident attrib expression
| IF expression then statement
| IF expression then statement ELSE statement
| WHILE expression DO statement
| compound_stmt
| readln ident
| writeln print_list
|
;

print_list : literal print_list2
| expression print_list2
;

print_list2 : ',' print_list
|
;

expression : add_expression relop add_expression
| add_expression
;

relop : lessequal
| '<'
| '>'
| moreequal
| '='
| notequal
;

add_expression : add_expression addop term
;

addop : '+'
| '-'
| or
;

term : term mulop unary_exp
| unary_exp
;

mulop : '*'
| div
| mod
| and
;

unary_exp : not unary_exp
| factor
;

factor : '(' expression ')'
| ident
| num
| TRUE
| FALSE
;


%%

我总是得到这个:
byaccj: 19 rules never reduced 
byaccj: 1 shift/reduce conflict.

对此有什么可能的解决方案?我发现其他人也有同样的错误,但我找不到对我的问题有用的东西。如果需要更多信息,我会提供。我还读到“规则永远不会减少”错误意味着我的语法中的某些规则从未被使用过,但我无法在我的规则中看到这一点。

最佳答案

在您的情况下,规则 proc_dec永远不会出现在任何其他规则的右侧,因此永远无法从您的起始符号 ( Program ) 到达它。 Yacc 只是告诉你这个规则(以及它使用的所有规则和其他规则)是不可访问的。

通常,您要使用 -v让 yacc 生成 y.output 的选项包含有关语法的详细信息的文件。该文件将具体告诉您所有冲突和未使用的规则——它们是什么以及它们是如何产生的——而消息只是为您提供问题的摘要。

关于bison - 规则永远不会减少,理解为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447829/

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