2016-03-28 34 views
0

私はこのコードを書いてパスカルパーサーを作成しました。バイソンがそれを分析すると、それは左回帰的かつあいまいな文法であるにもかかわらず、矛盾を示さない。私は、バイソン、コードのこの部分で、これらの競合を表示ではなく、あいまいな、左再帰文法の他の例を試しこれはコードBISON:shift/reduceの衝突なし

%{ 
#include<stdio.h> 
int yyparse(); 
int yylex(); 
int yyerror(char *s); 

%} 

%token ID; 
%token VAR; 
%token INT; 
%token FUNC; 
%token PROC; 
%token BEGIN; 
%token END; 
%token OPAFFECT; 
%token OPREL; 
%token OPADD; 
%token OPMUL; 
%token PROGRAM; 
%token NB; 
%token IF; 
%token THEN; 
%token ELSE; 
%token WHILE; 
%token DO; 
%token NOT; 
%token PO; 
%token PF; 
%token P; 
%token PV; 
%token DP; 
%token V; 
%token PLUS; 
%token MINUS; 
%% 

program : PROGRAM ID PV declaration compoundinstruction P 
declaration : vardeclaration subprogramsdec 
vardeclaration : vardeclaration VAR idlist DP INT PV | /*epsilon*/ 
idlist : ID | idlist V ID 
subprogramsdec : subprogramsdec subprograsdec PV | /*epsilon*/ 
subprograsdec : subprograsheader declaration compoundinstruction 
subprograsheader : FUNC ID arguments DP INT PV | PROC ID arguments PV 
arguments : PO parameterslist PF 
parameterslist : parametre | parameterslist PV parametre 
parametre : ID DP INT | VAR ID DP INT 
compoundinstruction : BEGIN optinstruction END 
optinstruction : instructionslist | /*epsilon*/ 
instructionslist : instruction | instructionslist PV instruction 
instruction : variable OPAFFECT expression | procedurecall | compoundinstruction | IF instruction THEN instruction ELSE instruction | WHILE expression DO instruction 
variable : ID 
procedurecall : ID | ID PO expressionslist PF 
expressionslist : expression | expressionslist V expression 
expression : simpleexpression | simpleexpression OPREL simpleexpression 
simpleexpression : term | sign term | simpleexpression OPADD term 
term : factor | term OPMUL factor 
factor : ID | ID PO expressionslist PF | NB | PO expression PF | NOT factor 
sign : PLUS | MINUS 

%% 
int yyerror(char *s) { 
    printf("yyerror : %s\n",s); 
    return 0; 
} 

int main(void) { 
    yyparse(); 
    return 0; 
} 

あります。 ありがとうございます!

答えて

0

左の再結合はLL解析の問題で、bisonはLR(実際はLALR)なので、左の再帰は問題ではありません。矛盾やその他の問題は発生しません。

あなたの文法にシフト/コンフリクトがないということは、あいまいではないということです。あなたはそれが何であると思いますか?