I've been working a school assignment and am having difficulty figuring out which issue is causing the multiple warnings below "type clash on default action." Any help would be greatly appreciated.Warnings received: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%{#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;}scanner.l%{#include <cstdio>#include <string>using namespace std;#include "values.h"#include "listing.h"#include "tokens.h"int l=0,r=0,cbl=0,cbr=0;%}%option noyywrapws [ \t\r]+comment \-\-.*\n|\/\/.*\nline [\n]arrow =>if if|IFendcase endcase|ENDCASEcase case|CASEendif endif|ENDIFelse else|ELSEothers others|OTHERSreal real|REALthen then|THENwhen when|WHENbegin begin|BEGINboolean boolean|BOOLEANendreduce endreduce|ENDREDUCEend end|ENDfunction function|FUNCTIONinteger integer|INTEGERis is|ISreduce reduce|REDUCEreturns returns|RETURNSand and|ANDor or|ORnot not|NOTbool_lit true|false|TRUE|FALSEbad_underscore [A-Za-z0-9_]*[_]{2}[A-Za-z0-9_]*|^[_][A-Za-z0-9_]*|[A-Za-z0-9_]*[_]+$digit [0-9]int [\-|\+]{0,1}{digit}+punc [\(\),:;]real_lit [\-|\+]{0,1}[0-9]+[\.][0-9]+[e|E][\-|\+][0-9]+|[\-|\+]{0,1}[0-9]*[\.][0-9]+|[\-|\+]{0,1}[0-9]+[\.][0-9]*id [A-Za-z][A-Za-z0-9_]*%%{ws} { ECHO; }{comment} { ECHO; nextLine();}{line} { ECHO; nextLine();}{arrow} { ECHO; return(ARROW); }"<" { ECHO; yylval.oper = LESS; return(RELOP); }">" { ECHO; yylval.oper = GREATER; return(RELOP); }">=" { ECHO; yylval.oper = GREATER_OR_EQUALS; return(RELOP); }"<=" { ECHO; yylval.oper = LESS_OR_EQUALS; return(RELOP); }"=" { ECHO; yylval.oper = EQUALS; return(RELOP); }"+" { ECHO; yylval.oper = ADD; return(ADDOP); }"-" { ECHO; yylval.oper = SUBTRACT; return(ADDOP); }"**" { ECHO; yylval.oper = EXPONENT; return(EXPOP); }"*" { ECHO; yylval.oper = MULTIPLY; return(MULOP); }"/" { ECHO; yylval.oper = DIVIDE; return(MULOP); }"REM" { ECHO; yylval.oper = REMAINDER; return(REMOP); }"rem" { ECHO; yylval.oper = REMAINDER; return(REMOP); }{if} { ECHO; return(IF); }{endcase} { ECHO; return(ENDCASE); }{case} { ECHO; return(CASE); }{endif} { ECHO; return(ENDIF); }{else} { ECHO; return(ELSE); }{others} { ECHO; return(OTHERS); }{real} { ECHO; return(REAL); }{then} { ECHO; return(THEN); }{when} { ECHO; return(WHEN); }{begin} { ECHO; return(BEGIN_); }{boolean} { ECHO; return(BOOLEAN); }{endreduce} { ECHO; return(ENDREDUCE); }{end} { ECHO; return(END); }{function} { ECHO; return(FUNCTION); }{integer} { ECHO; return(INTEGER); }{is} { ECHO; return(IS); }{reduce} { ECHO; return(REDUCE); }{returns} { ECHO; return(RETURNS); }{and} { ECHO; return(ANDOP); }{or} { ECHO; return(OROP); }{not} { ECHO; return(NOTOP); }{real_lit} { ECHO; return(REAL_LITERAL); }{bool_lit} { ECHO; return(BOOL_LITERAL); }{id} { ECHO; yylval.iden = (CharPtr)malloc(yyleng + 1); strcpy(yylval.iden, yytext); return(IDENTIFIER);}{int} { ECHO; yylval.value = atoi(yytext); return(INT_LITERAL); }{punc} { ECHO; return(yytext[0]); }. { ECHO; appendError(LEXICAL, yytext); }%% 解决方案 These are type mismatches on the default action from a rule that has no explicit action. The first one is coming from the rulefunction_header_: function_headeron line 62. Since there's no action here, it gets the action { $$ = $1; }, but $$ has type <value> (from the %type <value> function_header_ declaration), while $1 has no type (so <>, as there's no %type declaration for function_header) 这篇关于需要帮助确定“默认操作类型冲突"的原因.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 07-22 19:06