[Top][All Lists]
[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
>>
>>
>
smime.p7s
Description: S/MIME Cryptographic Signature