我正在使用lex和yacc。以下是lex和yacc計算器的程序。同時刪除yacc文件。請幫我解決這個問題。我收到以下錯誤:YACC中的移位減少錯誤
這是錯誤:
conflicts: 20 shift/reduce
// YACC程序
%{
#include<stdio.h>
#include<math.h>
extern void printsymbol();
struct symboltable
{
char name[20];
double value;
}ST[20];
%}
%union
{
double p;
}
%token <p> NUM
%token <p> IDENTIFIER
%token SIN COS TAN ROOT
%left '+' '-'
%left '*' '/'
%type <p> E
%%
Edash:E';'{printf("\n=%f",$1);printsymbol();}
|Edash E';'{printf("\n=%f",$2);printsymbol();}
E: E'+'E {$$=$1+$3;}
|E'-'E {$$=$1-$3;}
|E'*'E {$$=$1*$3;}
|E'/'E {$$=$1/$3;}
|NUM {$$=$1;}
|IDENTIFIER {$$=ST[(int)]$1.value;}
|'('E')' {$$=$2;}
|IDENTIFIER'='E {$$=ST[(int)]$1.value=$3;}
|SIN E {$$=sin($2*3.141/180);}
|COS E {$$=sin($2*3.141/180);}
|TAN E {$$=sin($2*3.141/180);}
|ROOT E {$$=sqrt($2);}
%%
int main()
{
yyparse();
}
yyerror()
{
printf("Error Found..!");
}
「一個真實的awk中的」源代碼的一些歷史版本在語法上有多達96個轉換/減少衝突。看到這個歷史性的知識庫:https://github.com/danfuzz/one-true-awk所以,如果你不知道如何操作Yacc,那麼你就是來自貝爾實驗室的一些知名人士! – Kaz 2014-10-03 22:14:08