help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Resolving shift/reduce conflict in Bison grammar


From: Martin Alexander David Neumann
Subject: Re: Resolving shift/reduce conflict in Bison grammar
Date: Sat, 31 Jul 2010 17:58:00 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.10) Gecko/20100724 Thunderbird/3.0.5 ThunderBrowse/3.2.8.1

Hi Anand,

as I already mentioned, the problem is in your productions of
"external_declaration":

external_declaration
        : function_definition
        | declaration
        ;

probably the bext fix is to get rid of your init_dec non-terminal or you
change the above to something like:

external_declaration
        : function_definition
        ;

or

external_declaration
        : declaration
        ;

Cheers, Alex

On 07/31/2010 04:39 PM, anandvn wrote:
> 
> Hi,
> 
> find the output file info below,
> 
> State 0 contains 6 shift/reduce conflicts.
> State 7 contains 6 shift/reduce conflicts.
> 
> state 0
> 
>     STATIC    shift, and go to state 1
>     CONST     shift, and go to state 2
>     VOLATILE  shift, and go to state 3
>     EXTERN    shift, and go to state 4
>     INT       shift, and go to state 5
>     UNSIGNED  shift, and go to state 6
> 
>     STATIC    [reduce using rule 10 (init_dec)]
>     CONST     [reduce using rule 10 (init_dec)]
>     VOLATILE  [reduce using rule 10 (init_dec)]
>     EXTERN    [reduce using rule 10 (init_dec)]
>     INT       [reduce using rule 10 (init_dec)]
>     UNSIGNED  [reduce using rule 10 (init_dec)]
>     $default  reduce using rule 10 (init_dec)
> 
>     translation_unit  go to state 7
>     external_declaration      go to state 8
>     function_definition       go to state 9
>     declaration       go to state 10
>     init_dec  go to state 11
>     declaration_specifiers    go to state 12
>     storage_class_specifier   go to state 13
>     type_specifier    go to state 14
>     type_qualifier    go to state 15
> 
> state 7
> 
>     translation_unit  ->  translation_unit . external_declaration   (rule 2)
> 
>     $         go to state 31
>     STATIC    shift, and go to state 1
>     CONST     shift, and go to state 2
>     VOLATILE  shift, and go to state 3
>     EXTERN    shift, and go to state 4
>     INT       shift, and go to state 5
>     UNSIGNED  shift, and go to state 6
> 
>     STATIC    [reduce using rule 10 (init_dec)]
>     CONST     [reduce using rule 10 (init_dec)]
>     VOLATILE  [reduce using rule 10 (init_dec)]
>     EXTERN    [reduce using rule 10 (init_dec)]
>     INT       [reduce using rule 10 (init_dec)]
>     UNSIGNED  [reduce using rule 10 (init_dec)]
>     $default  reduce using rule 10 (init_dec)
> 
>     external_declaration      go to state 16
>     function_definition       go to state 9
>     declaration       go to state 10
>     init_dec  go to state 11
>     declaration_specifiers    go to state 12
>     storage_class_specifier   go to state 13
>     type_specifier    go to state 14
>     type_qualifier    go to state 15
> 
> How to resolve these conflicts? how to obtain my requirement to initialize
> the declaration before parser starts into the declaration part?
> 
> Full output file :  http://old.nabble.com/file/p29313323/grammar.output
> grammar.output 
> 
> - Anand V
> 
> 
> panayk wrote:
>>
>> Hi!
>>
>> Use the -v (verbose) flag on bison to generate the xxx.output file that 
>> contains more information about the parser automaton (including where 
>> the conflicts appear). Then please post it here.
>>
>> You may also want to read the debugging section from:
>>
>> info bison
>>
>> Regards,
>>      Panayiotis
>>
>> On 07/31/2010 04:54 PM, anandvn wrote:
>>> Hi,
>>>
>>> Could any one please help me in resolving the shift/reduce in the
>>> following
>>> grammar?
>>>
>>> %{
>>> #include<stdio.h>
>>> extern char yytext[];
>>> extern int column;
>>> void yyerror(char const *s);
>>> %}
>>>
>>> %union
>>> {
>>>     unsigned int tokVal;
>>>     unsigned char *tokValStr;
>>> }
>>>
>>> /* C operators */
>>> %token<tokVal>  STATIC CONST VOLATILE EXTERN INT UNSIGNED VARNAME EQUAL
>>> COLON OP_BRACE CL_BRACE IDENTIFIER
>>>
>>> %type<tokVal>  declaration translation_unit declaration_specifiers
>>> storage_class_specifier type_specifier type_qualifier
>>> init_declarator_list
>>>
>>> /* Parsing starts with this transalation unit */
>>> %start translation_unit
>>>
>>> %%
>>>
>>> translation_unit
>>>     : external_declaration
>>>     | translation_unit external_declaration
>>>     ;
>>>
>>> external_declaration
>>>     : function_definition
>>>     | declaration
>>>     ;
>>>
>>> function_definition
>>>     : declaration_specifiers declarator compound_statement
>>>     ;
>>>
>>> declarator
>>>     : IDENTIFIER
>>>     ;
>>>
>>> compound_statement
>>>     : OP_BRACE CL_BRACE
>>>     ;
>>>     
>>> declaration
>>>     : init_dec declaration_specifiers COLON
>>>     | init_dec declaration_specifiers init_declarator_list COLON
>>>     ;       
>>>
>>> init_dec
>>>     : {printf("*** Process for Initialization ***\n\n");}
>>>     
>>> init_declarator_list
>>>     :       EQUAL VARNAME
>>>     ;
>>>     
>>> declaration_specifiers
>>>     : storage_class_specifier
>>>     | storage_class_specifier declaration_specifiers
>>>     | type_specifier
>>>     | type_specifier declaration_specifiers
>>>     | type_qualifier
>>>     | type_qualifier declaration_specifiers
>>>     ;
>>>     
>>> storage_class_specifier
>>>     : EXTERN
>>>     | STATIC
>>>     ;
>>>
>>> type_specifier
>>>     : INT
>>>     | UNSIGNED
>>>     ;       
>>>     
>>> type_qualifier
>>>     : CONST
>>>     | VOLATILE
>>>     ;
>>>     
>>> %%
>>>
>>> void yyerror(char const *s)
>>> {
>>>     fflush(stdout);
>>>     printf("\n%*s\n%*s\n", column, "^", column, s);
>>> }
>>>
>>> In the rule "declaration", I want to perform initalization activities
>>> using
>>> the empty rule "init_dec" (original code here
>>> http://old.nabble.com/file/p29313133/Test.zip Test.zip ). But i'm getting
>>> shift/reduce conflict. Since I'm new to this bison, i need help from you
>>> to
>>> resolve this conflict. I tried by i felt very difficult.
>>>
>>> Thanks
>>> Anand V
>>>    
>>
>>
>> _______________________________________________
>> address@hidden http://lists.gnu.org/mailman/listinfo/help-bison
>>
>>
> 

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]