Bison 需要帮助确定“的原因”;键入“默认操作时碰撞”;
我一直在做一个学校作业,很难找出是哪个问题导致了下面的“默认操作类型冲突”的多个警告。任何帮助都将不胜感激 收到的警告: parser.y:62.9-23: warning: type clash on default action: <value> != <> parser.y:71.9-16: warning: type clash on default action: <value> != <> parser.y:82.5-23: warning: type clash on default action: <value> != <iden> parser.y:83.5-27: warning: type clash on default action: <value> != <iden> parser.y:104.5-55: warning: type clash on default action: <value> != <> parser.y:105.5-60: warning: type clash on default action: <value> != <> parser.y:108.5-37: warning: type clash on default action: <value> != <> parser.y:122.49-53: warning: type clash on default action: <oper> != <> parser.y:122.57-60: warning: type clash on default action: <oper> != <> parser.y:127.5-14: warning: type clash on default action: <value> != <iden> parser.y:157.9-35: warning: type clash on default action: <value> != <iden> parser.y:160.9-20: warning: type clash on default action: <value> != <> parser.y:161.9-21: warning: type clash on default action: <value> != <oper> parser.y:62.9-23:警告:在默认操作中键入clash:!= parser.y:71.9-16:警告:在默认操作中键入clash:!= parser.y:82.5-23:警告:在默认操作中键入clash:!= parser.y:83.5-27:警告:在默认操作中键入clash:!= parser.y:104.5-55:警告:在默认操作中键入clash:!= parser.y:105.5-60:警告:在默认操作中键入clash:!= parser.y:108.5-37:警告:在默认操作中键入clash:!= parser.y:122.49-53:警告:在默认操作中键入clash:!= parser.y:122.57-60:警告:在默认操作中键入clash:!= parser.y:127.5-14:警告:在默认操作中键入clash:!= parser.y:157.9-35:警告:在默认操作中键入clash:!= parser.y:160.9-20:警告:在默认操作中键入clash:!= parser.y:161.9-21:警告:在默认操作中键入clash:!= 语法分析器Bison 需要帮助确定“的原因”;键入“默认操作时碰撞”;,bison,flex-lexer,Bison,Flex Lexer,我一直在做一个学校作业,很难找出是哪个问题导致了下面的“默认操作类型冲突”的多个警告。任何帮助都将不胜感激 收到的警告: parser.y:62.9-23: warning: type clash on default action: <value> != <> parser.y:71.9-16: warning: type clash on default action: <value> != <> parser.y:82.5-23: warni
%{
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
#include "values.h"
#include "listing.h"
#include "symbols.h"
int yylex();
void yyerror(const char* message);
Symbols<int> symbols;
int result;
%}
%error-verbose
%union
{
CharPtr iden;
Operators oper;
int value;
}
%token <value> INT_LITERAL REAL_LITERAL INTEGER REAL
%token <iden> IDENTIFIER
%token ARROW
%token ANDOP OROP
%token <oper> NOTOP EXPOP MULOP REMOP ADDOP RELOP
%token BOOL_LITERAL BOOLEAN
%token IF THEN ELSE ENDIF CASE OTHERS ENDCASE WHEN
%token BEGIN_ END ENDREDUCE FUNCTION IS REDUCE RETURNS
%type <value> function_header_ body variable_ parameter cases case statements statement_ statement reductions exponent expression logical relation term
factor power primary
%type <oper> operator
%%
function:
function_header_ variables body {result = $3;} ;
function_header:
FUNCTION IDENTIFIER parameters RETURNS type ';' ;
function_header_:
function_header |
error ';' {$$ = 0;} ;
statement_:
statement ';' |
error ';' {$$ = 0;} ;
variable_:
variable |
error ';' {$$ = 0;} ;
variable:
IDENTIFIER ':' type IS statement_ {symbols.insert($1, $5);} ;
variables:
variables variable_ |
;
parameter:
IDENTIFIER ':' type |
IDENTIFIER ':' type ',' ;
parameters:
parameters parameter |
;
type:
INTEGER | REAL |
BOOLEAN ;
body:
BEGIN_ statement_ END ';' {$$ = $2;} ;
statements:
statements statement_ |
statement_ ;
statement:
expression |
REDUCE operator reductions ENDREDUCE {$$ = $3;} |
IF expression THEN statements ELSE statements ENDIF |
CASE expression IS cases OTHERS ARROW statement_ ENDCASE ;
case:
WHEN INT_LITERAL ARROW statement_;
cases:
cases case |
case
;
reductions:
reductions statement_ {$$ = evaluateReduction($<oper>0, $1, $2);} |
{$$ = $<oper>0 == ADD ? 0 : 1;} ;
operator:
NOTOP | MULOP | REMOP | ADDOP | RELOP | ANDOP | OROP ;
exponent:
INT_LITERAL |
REAL_LITERAL |
IDENTIFIER ;
expression:
expression OROP logical {$$ = $1 || $3;} |
logical ;
logical:
logical ANDOP relation {$$ = $1 && $3;} |
relation ;
relation:
relation RELOP term {$$ = evaluateRelational($1, $2, $3);} |
term ;
term:
term ADDOP factor {$$ = evaluateArithmetic($1, $2, $3);} |
factor ;
factor:
factor MULOP power {$$ = evaluateArithmetic($1, $2, $3);} |
factor REMOP power {$$ = evaluateArithmetic($1, $2, $3);} |
power ;
/* right-associative */
power:
primary EXPOP exponent {$$ = evaluateArithmetic($1, $2, $3);}
;
primary:
IDENTIFIER {if (!symbols.find($1, $$)) appendError(UNDECLARED, $1);} |
IDENTIFIER '('expression')' |
INT_LITERAL |
REAL_LITERAL |
BOOL_LITERAL |
NOTOP primary |
'(' expression ')' {$$ = $2;}
;
%%
void yyerror(const char* message)
{
appendError(SYNTAX, message);
}
int main(int argc, char *argv[])
{
firstLine();
yyparse();
if (lastLine() == 0)
cout << "Result = " << result << endl;
return 0;
}
%{
#包括
#包括
#包括
#包括
使用名称空间std;
#包括“values.h”
#包括“listing.h”
#包括“符号.h”
int-yylex();
无效错误(常量字符*消息);
符号;
int结果;
%}
%错误详细
%联合
{
CharPtr iden;
操作人员;
int值;
}
%标记整数\文字实数\文字整数实数
%令牌标识符
%记号箭
%代币
%令牌NOTOP EXOP MULOP REMOP ADDOP RELOP
%标记布尔布尔值
%标记IF THEN ELSE ENDIF CASE OTHERS ENDCASE WHEN
%令牌开始\结束结束减少函数为减少返回
%类型函数\头\体变量\参数用例用例语句\语句缩减指数表达式逻辑关系项
一次功率因数
%类型运算符
%%
功能:
函数头变量体{result=$3;};
功能单元标题:
函数标识符参数返回类型“;”;
函数\u头\u:
函数头|
错误“;”{$$ = 0;} ;
声明:
语句“;”|
错误“;”{$$ = 0;} ;
可变参数:
变数|
错误“;”{$$ = 0;} ;
变量:
标识符“:”类型是语句{symbols.insert($1,$5);};
变量:
变量|
;
参数:
标识符“:”类型|
标识符':'类型',';
参数:
参数|
;
类型:
整数|实|
布尔型;
正文:
开始语句结束语句{$$ = $2;} ;
声明:
声明|
声明;;
声明:
表情|
REDUCE运算符缩减ENDREDUCE{$$=$3;}|
IF表达式THEN语句ELSE语句ENDIF|
CASE表达式为cases-OTHERS-ARROW语句uucase;
案例:
当INT_文字箭头语句u;
案例:
案例|
案例
;
减少:
减少报表{$$=evaluateReduction($0,$1,$2);}|
{$$=$0==ADD?0:1;};
接线员:
不可移动| MULOP | REMOP | ADDOP | RELOP |和op | OROP ;;
指数:
整数文字|
实数|
标识符;
表达方式:
表达式OROP逻辑{$$=$1 | |$3;}|
逻辑的;
逻辑:
逻辑ANDOP关系{$$=$1&&$3;}|
关系
关系:
关系重新计算项{$$=evaluateRelational($1,$2,$3);}|
学期
术语:
术语添加因子{$$=evaluateArtihmetic($1,$2,$3);}|
因素
因素:
因子MULOP power{$$=评估算术($1,$2,$3);}|
移除功率因数{$$=EvaluateArthmetic($1,$2,$3);}|
权力
/*右联想*/
权力:
主指数{$$=EvaluateArthmetic($1,$2,$3);}
;
主要:
标识符{if(!symbols.find($1,$$))appendError(未声明,$1);}|
标识符“('expression')”|
整数文字|
实数|
布尔卢文字|
诺托普小学|
“(“表达式”)”{$$=$2;}
;
%%
无效错误(常量字符*消息)
{
追加错误(语法、消息);
}
int main(int argc,char*argv[])
{
第一行();
yyparse();
如果(lastLine()==0)
cout这些是来自没有显式操作的规则的默认操作的类型不匹配。第一个来自规则
function_header_: function_header
在第62行。由于这里没有操作,它获取操作{$$=$1;}
,但是$
有类型
(从%type function\u header\u
声明),而$1
没有类型(因此
,因为function\u header
没有%type
声明)
function_header_: function_header