21124-hw2.y:冲突:148次/减少,1减少/减少

时间:2018-03-12 17:34:40

标签: bison yacc

这个野牛档案有什么问题?

21124-hw2.y:冲突:148次/减少,1减少/减少 错误就是这个。哪里暧昧? 这个野牛文件连接flex文件,这些所有令牌也都是在flex中创建的。 我没有写这个代码包括部分和主要部分。正如你在评论中看到的那样,问题就是问题。我给出了这些部分的优先权,但它没有用。

        %token tFOR tIN tIF tFUNCTION tSEMICOLON tLPAR tLBRKT tSTAR tPLUS tLBRACE tLT tCOLON tINT tREAL tSTRING tWHILE tVAR tELSE tEQCHECK tCOMMA tRPAR tRBRKT tRBRACE tGT tEQ tMINUS tNOT tIDENT  
// these are tokens which i getting in flex
        %left '+' '-' '!'
        %left '*' "=="
        %left '<' '>'
        %left ';'
        %left '='
        %left '(' ')'
        %left '{' '}'
        %left '[' ']'
        %left ',' ':'
       // these re the prirotiries
        %%
        // down below all thing grammer part.
        prog : statementList 
        ;
        statementList : statementList statement
                    | statementList ';' statement
                | statement
        ;
        statement : assign | if | expr | statementBlock
              | while | for | functionCall | functionDeclaration
        ;
        assign : tIDENT '=' expr
               | tVAR tIDENT '=' expr
        ;
        if : ifPart elsePart
        ;
        ifPart : tIF '(' expr ')' statementBlock
        ;
        elsePart :  tELSE statementBlock
             |
        ; 
        while : tWHILE '(' expr ')' statementBlock
        ;
        for : tFOR '(' tIDENT tIN expr ')' statementBlock
            | tFOR '(' tVAR tIDENT tIN expr ')' statementBlock
        ;
        functionDeclaration : tFUNCTION tIDENT '(' exprList ')' statementBlock
                      | tFUNCTION tIDENT '(' ')' statementBlock
        ;
        statementBlock: '{' statementList '}'
        ;
        functionCall : tIDENT '(' exprList ')'
                   | tIDENT '(' ')'
        ;
        // i think the problem is there
        expr : tIDENT | tREAL | tINT | tSTRING |
             | '[' ']' | '[' exprList ']'
             | '{' '}' | '{' propertyList '}'   
             | '!' expr | expr '+' expr | expr '-' expr
             | expr '*' expr | expr "==" expr
             | expr '<' expr | expr '>' expr
//if there is the expr between '*' star should havpriority 
        ;
        exprList : expr | exprList ',' expr
        ;
        propertyList : tIDENT ':' expr 
                     | propertyList ',' tIDENT ':' expr
        ;
        // this down below is  main it say grammaticly correct or not?(i didnt wrote that part)
        %%

1 个答案:

答案 0 :(得分:1)

问题在于,在第一个引用行的末尾:

expr : tIDENT | tREAL | tINT | tSTRING |
     | '[' ']' | '[' exprList ']'

重复的 | 有效地创建了规则:

expr : %empty

会立即导致大量冲突,特别是因为您允许分号是可选的:

statementList : statementList statement
              | statementList ';' statement
              | statement

如果您曾要求野牛发出警告,则会立即显示该错误(以及您可能需要考虑的其他一些警告):

bison -Wall ...