help-bison
[Top][All Lists]
Advanced

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

Updating UnderC C/C++ interpreter and reduce/reduce conflicts


From: Domingo Alvarez Duarte
Subject: Updating UnderC C/C++ interpreter and reduce/reduce conflicts
Date: Mon, 29 Mar 2010 20:36:50 +0200

Hello !

I'm trying to revive the open source UnderC C/C++ interpreter and make it
compilable with modern compilers, I managed to solve the compilation problem
on windows with mingw, with vc++ 2008 it compiles but crash and the same
happens on linux but interesting enough if I compile then with for debug
both seems to work, but the last is another issue.

Sources that works with mingw on windows are availlable at
https://code.google.com/p/underc-fltk/, the grammar itself is at
https://code.google.com/p/underc-fltk/source/browse/trunk/underc-dad/src/parser.y.

By works I mean they compile and works for most of the C/C++ grammar, some
things that doesn't work and are present on the grammar are:

- "unsigned some_var_name;" although "unsigned int somve_var_name;" works
- "friend class some_class_name;" doesn't work although it's on the grammar
- "typedef (some_func_type_name)(any_arguments);" although "typedef
(*some_func_type_name)(any_arguments);" does work (pointer to function type)

It seems that the problem derives from the reduce/reduce conflicts that some
modification to the grammar in the past could introduced.

Thanks in advance to any help !

My question here is how I can solve the reduce/reduce conflicts in it's
grammar , they seem to have a common root:

State 93 conflicts: 1 shift/reduce, 1 reduce/reduce
State 387 conflicts: 1 shift/reduce, 1 reduce/reduce
State 424 conflicts: 2 shift/reduce, 94 reduce/reduce
State 452 conflicts: 1 shift/reduce, 1 reduce/reduce

state 93

   37 declaration: mod_type_name . tname_expr_list ';'
   46 function_front: mod_type_name . tname_expr arg_list poss_const
poss_initialization
  101 pointer_expr: . '(' STAR token ')'
  104 tname_expr: .  [ASSIGN, ';', ':', '(', '[', ',']
  105           | . token
  106           | . pointer_expr arg_list
  107           | . '(' scope STAR token ')' end_scope arg_list
  108           | . STAR poss_const tname_expr
  109           | . ADDR tname_expr
  110           | . scope token end_scope
  111           | . scope conversion_operator end_scope
  112           | . tname_expr array_expr
  113           | . pointer_expr array_expr
  114           | . error
  118 token: . TOKEN
  127 init_tname_expr: . tname_expr poss_initialization
  128 tname_expr_list: .  [';']
  129                | . init_tname_expr
  130                | . init_tname_expr ',' tname_expr_list
  199 scope: . typename_expr BINARY_SCOPE
  330 typename_expr: . TYPENAME_FUNCTION
  331              | . template_expr
  332              | . scope typename_expr end_scope
  334 template_expr: . TEMPLATE_NAME_EXPR template_type_list

    error               shift, and go to state 225
    TOKEN               shift, and go to state 226
    TYPENAME_FUNCTION   shift, and go to state 151
    TEMPLATE_NAME_EXPR  shift, and go to state 8
    STAR                shift, and go to state 227
    ADDR                shift, and go to state 228
    '('                 shift, and go to state 229

    ASSIGN  reduce using rule 104 (tname_expr)
    ';'     reduce using rule 104 (tname_expr)
    ';'     [reduce using rule 128 (tname_expr_list)]
    ':'     reduce using rule 104 (tname_expr)
    '('     [reduce using rule 104 (tname_expr)]
    '['     reduce using rule 104 (tname_expr)
    ','     reduce using rule 104 (tname_expr)

    pointer_expr     go to state 230
    tname_expr       go to state 231
    token            go to state 232
    init_tname_expr  go to state 233
    tname_expr_list  go to state 234
    scope            go to state 235
    typename_expr    go to state 130
    template_expr    go to state 132

state 387

  101 pointer_expr: . '(' STAR token ')'
  104 tname_expr: .  [ASSIGN, ';', ':', '(', '[', ',']
  105           | . token
  106           | . pointer_expr arg_list
  107           | . '(' scope STAR token ')' end_scope arg_list
  108           | . STAR poss_const tname_expr
  109           | . ADDR tname_expr
  110           | . scope token end_scope
  111           | . scope conversion_operator end_scope
  112           | . tname_expr array_expr
  113           | . pointer_expr array_expr
  114           | . error
  118 token: . TOKEN
  127 init_tname_expr: . tname_expr poss_initialization
  128 tname_expr_list: .  [';']
  129                | . init_tname_expr
  130                | . init_tname_expr ',' tname_expr_list
  130                | init_tname_expr ',' . tname_expr_list
  199 scope: . typename_expr BINARY_SCOPE
  330 typename_expr: . TYPENAME_FUNCTION
  331              | . template_expr
  332              | . scope typename_expr end_scope
  334 template_expr: . TEMPLATE_NAME_EXPR template_type_list

    error               shift, and go to state 225
    TOKEN               shift, and go to state 226
    TYPENAME_FUNCTION   shift, and go to state 151
    TEMPLATE_NAME_EXPR  shift, and go to state 8
    STAR                shift, and go to state 227
    ADDR                shift, and go to state 228
    '('                 shift, and go to state 229

    ASSIGN  reduce using rule 104 (tname_expr)
    ';'     reduce using rule 104 (tname_expr)
    ';'     [reduce using rule 128 (tname_expr_list)]
    ':'     reduce using rule 104 (tname_expr)
    '('     [reduce using rule 104 (tname_expr)]
    '['     reduce using rule 104 (tname_expr)
    ','     reduce using rule 104 (tname_expr)

    pointer_expr     go to state 230
    tname_expr       go to state 483
    token            go to state 232
    init_tname_expr  go to state 233
    tname_expr_list  go to state 484
    scope            go to state 235
    typename_expr    go to state 130
    template_expr    go to state 132

state 424

  119 begin_list: . '('
  202 assign_op: . MUL_A
  203          | . DIV_A
  204          | . MOD_A
  205          | . ADD_A
  206          | . MINUS_A
  207          | . SHL_A
  208          | . SHR_A
  209          | . BAND_A
  210          | . BOR_A
  211          | . XOR_A
  227 _expr: _expr . STAR _expr
  228      | _expr . DIVIDE _expr
  229      | _expr . MODULO _expr
  230      | _expr . PLUS _expr
  231      | _expr . MINUS _expr
  232      | _expr . BIN_AND _expr
  233      | _expr . BIN_OR _expr
  237      | _expr . LESS_THAN _expr
  238      | _expr . GREATER _expr
  239      | _expr . LEQ _expr
  240      | _expr . GEQ _expr
  241      | _expr . EQUAL _expr
  242      | _expr . NOT_EQUAL _expr
  243      | _expr . LOG_AND _expr
  244      | _expr . LOG_OR _expr
  245      | _expr . ASSIGN _expr
  246      | _expr . assign_op _expr
  247      | _expr . INCR
  249      | _expr . DECR
  253      | _expr . ARITH_IF _expr ':' _expr
  254      | _expr . COMMA _expr
  266      | _expr . LSHIFT _expr
  267      | _expr . RSHIFT _expr
  268      | _expr . ADDR _expr
  268      | _expr ADDR _expr .  [$end, error, TOKEN, IDEN, CONSTANT,
TYPENAME, TYPENAME_FUNCTION, TEMPLATE_NAME, TEMPLATE_NAME_EXPR,
THIS_CLASSNAME, FLOAT, DOUBLE, UNSIGNED, INT, SHORT, LONG, CHAR, VOID, BOOL,
TYPEDEF, ENUM, OPERATOR, GOTO, STATIC_CAST, CONST_CAST, DYNAMIC_CAST,
REINTERPRET_CAST, STRUCT_Y, CLASS_Y, UNION_Y, IF, ELSE, WHILE, DO, FOR,
SWITCH, CASE, RETURN, CONTINUE, BREAK, DEFAULT, NAMESPACE, USING, TRY,
THROW, TEMPLATE, EXTERN, TYPEOF, EXPLICIT, FRIEND, CONST, STATIC, STDCALL,
API, VIRTUAL, PRIVATE, PROTECTED, PUBLIC, CLASS, STRUCT, UNION, COMMA,
XOR_A, BOR_A, BAND_A, SHR_A, SHL_A, MINUS_A, ADD_A, MOD_A, DIV_A, MUL_A,
ASSIGN, ARITH_IF, LOG_OR, LOG_AND, BIN_OR, BIN_XOR, BIN_AND, SIZEOF,
BIN_NOT, LOG_NOT, DELETE, NEW, BINARY_SCOPE, '{', '}', ';', ':', '(', ')',
'[', ']', ',']
  269      | _expr . BIN_XOR _expr
  270      | _expr . ADDR _expr
  270      | _expr ADDR _expr .  [$end, error, TOKEN, IDEN, CONSTANT,
TYPENAME, TYPENAME_FUNCTION, TEMPLATE_NAME, TEMPLATE_NAME_EXPR,
THIS_CLASSNAME, FLOAT, DOUBLE, UNSIGNED, INT, SHORT, LONG, CHAR, VOID, BOOL,
TYPEDEF, ENUM, OPERATOR, GOTO, STATIC_CAST, CONST_CAST, DYNAMIC_CAST,
REINTERPRET_CAST, STRUCT_Y, CLASS_Y, UNION_Y, IF, ELSE, WHILE, DO, FOR,
SWITCH, CASE, RETURN, CONTINUE, BREAK, DEFAULT, NAMESPACE, USING, TRY,
THROW, TEMPLATE, EXTERN, TYPEOF, EXPLICIT, FRIEND, CONST, STATIC, STDCALL,
API, VIRTUAL, PRIVATE, PROTECTED, PUBLIC, CLASS, STRUCT, UNION, COMMA,
XOR_A, BOR_A, BAND_A, SHR_A, SHL_A, MINUS_A, ADD_A, MOD_A, DIV_A, MUL_A,
ASSIGN, ARITH_IF, LOG_OR, LOG_AND, BIN_OR, BIN_XOR, BIN_AND, SIZEOF,
BIN_NOT, LOG_NOT, DELETE, NEW, BINARY_SCOPE, '{', '}', ';', ':', '(', ')',
'[', ']', ',']
  271      | _expr . '[' _expr ']'
  272      | _expr . function_arg_list
  274      | _expr . DOT address@hidden TOKEN
  276      | _expr . ARROW address@hidden TOKEN
  278      | _expr . MEMBER_ARROW address@hidden TOKEN
  282 function_arg_list: . '(' ')'
  283                  | . init_list
  284 init_list: . begin_list expr_list end_list

    NOT_EQUAL     shift, and go to state 267
    EQUAL         shift, and go to state 268
    GEQ           shift, and go to state 269
    GREATER       shift, and go to state 270
    LEQ           shift, and go to state 271
    LESS_THAN     shift, and go to state 272
    RSHIFT        shift, and go to state 273
    LSHIFT        shift, and go to state 274
    MINUS         shift, and go to state 275
    PLUS          shift, and go to state 276
    MODULO        shift, and go to state 277
    DIVIDE        shift, and go to state 278
    STAR          shift, and go to state 279
    MEMBER_ARROW  shift, and go to state 280
    DECR          shift, and go to state 281
    INCR          shift, and go to state 282
    ADDR          shift, and go to state 283
    DOT           shift, and go to state 284
    ARROW         shift, and go to state 285
    '('           shift, and go to state 140
    '['           shift, and go to state 286

    $end                reduce using rule 268 (_expr)
    $end                [reduce using rule 270 (_expr)]
    error               reduce using rule 268 (_expr)
    error               [reduce using rule 270 (_expr)]
    TOKEN               reduce using rule 268 (_expr)
    TOKEN               [reduce using rule 270 (_expr)]
    IDEN                reduce using rule 268 (_expr)
    IDEN                [reduce using rule 270 (_expr)]
    CONSTANT            reduce using rule 268 (_expr)
    CONSTANT            [reduce using rule 270 (_expr)]
    TYPENAME            reduce using rule 268 (_expr)
    TYPENAME            [reduce using rule 270 (_expr)]
    TYPENAME_FUNCTION   reduce using rule 268 (_expr)
    TYPENAME_FUNCTION   [reduce using rule 270 (_expr)]
    TEMPLATE_NAME       reduce using rule 268 (_expr)
    TEMPLATE_NAME       [reduce using rule 270 (_expr)]
    TEMPLATE_NAME_EXPR  reduce using rule 268 (_expr)
    TEMPLATE_NAME_EXPR  [reduce using rule 270 (_expr)]
    THIS_CLASSNAME      reduce using rule 268 (_expr)
    THIS_CLASSNAME      [reduce using rule 270 (_expr)]
    FLOAT               reduce using rule 268 (_expr)
    FLOAT               [reduce using rule 270 (_expr)]
    DOUBLE              reduce using rule 268 (_expr)
    DOUBLE              [reduce using rule 270 (_expr)]
    UNSIGNED            reduce using rule 268 (_expr)
    UNSIGNED            [reduce using rule 270 (_expr)]
    INT                 reduce using rule 268 (_expr)
    INT                 [reduce using rule 270 (_expr)]
    SHORT               reduce using rule 268 (_expr)
    SHORT               [reduce using rule 270 (_expr)]
    LONG                reduce using rule 268 (_expr)
    LONG                [reduce using rule 270 (_expr)]
    CHAR                reduce using rule 268 (_expr)
    CHAR                [reduce using rule 270 (_expr)]
    VOID                reduce using rule 268 (_expr)
    VOID                [reduce using rule 270 (_expr)]
    BOOL                reduce using rule 268 (_expr)
    BOOL                [reduce using rule 270 (_expr)]
    TYPEDEF             reduce using rule 268 (_expr)
    TYPEDEF             [reduce using rule 270 (_expr)]
    ENUM                reduce using rule 268 (_expr)
    ENUM                [reduce using rule 270 (_expr)]
    OPERATOR            reduce using rule 268 (_expr)
    OPERATOR            [reduce using rule 270 (_expr)]
    GOTO                reduce using rule 268 (_expr)
    GOTO                [reduce using rule 270 (_expr)]
    STATIC_CAST         reduce using rule 268 (_expr)
    STATIC_CAST         [reduce using rule 270 (_expr)]
    CONST_CAST          reduce using rule 268 (_expr)
    CONST_CAST          [reduce using rule 270 (_expr)]
    DYNAMIC_CAST        reduce using rule 268 (_expr)
    DYNAMIC_CAST        [reduce using rule 270 (_expr)]
    REINTERPRET_CAST    reduce using rule 268 (_expr)
    REINTERPRET_CAST    [reduce using rule 270 (_expr)]
    STRUCT_Y            reduce using rule 268 (_expr)
    STRUCT_Y            [reduce using rule 270 (_expr)]
    CLASS_Y             reduce using rule 268 (_expr)
    CLASS_Y             [reduce using rule 270 (_expr)]
    UNION_Y             reduce using rule 268 (_expr)
    UNION_Y             [reduce using rule 270 (_expr)]
    IF                  reduce using rule 268 (_expr)
    IF                  [reduce using rule 270 (_expr)]
    ELSE                reduce using rule 268 (_expr)
    ELSE                [reduce using rule 270 (_expr)]
    WHILE               reduce using rule 268 (_expr)
    WHILE               [reduce using rule 270 (_expr)]
    DO                  reduce using rule 268 (_expr)
    DO                  [reduce using rule 270 (_expr)]
    FOR                 reduce using rule 268 (_expr)
    FOR                 [reduce using rule 270 (_expr)]
    SWITCH              reduce using rule 268 (_expr)
    SWITCH              [reduce using rule 270 (_expr)]
    CASE                reduce using rule 268 (_expr)
    CASE                [reduce using rule 270 (_expr)]
    RETURN              reduce using rule 268 (_expr)
    RETURN              [reduce using rule 270 (_expr)]
    CONTINUE            reduce using rule 268 (_expr)
    CONTINUE            [reduce using rule 270 (_expr)]
    BREAK               reduce using rule 268 (_expr)
    BREAK               [reduce using rule 270 (_expr)]
    DEFAULT             reduce using rule 268 (_expr)
    DEFAULT             [reduce using rule 270 (_expr)]
    NAMESPACE           reduce using rule 268 (_expr)
    NAMESPACE           [reduce using rule 270 (_expr)]
    USING               reduce using rule 268 (_expr)
    USING               [reduce using rule 270 (_expr)]
    TRY                 reduce using rule 268 (_expr)
    TRY                 [reduce using rule 270 (_expr)]
    THROW               reduce using rule 268 (_expr)
    THROW               [reduce using rule 270 (_expr)]
    TEMPLATE            reduce using rule 268 (_expr)
    TEMPLATE            [reduce using rule 270 (_expr)]
    EXTERN              reduce using rule 268 (_expr)
    EXTERN              [reduce using rule 270 (_expr)]
    TYPEOF              reduce using rule 268 (_expr)
    TYPEOF              [reduce using rule 270 (_expr)]
    EXPLICIT            reduce using rule 268 (_expr)
    EXPLICIT            [reduce using rule 270 (_expr)]
    FRIEND              reduce using rule 268 (_expr)
    FRIEND              [reduce using rule 270 (_expr)]
    CONST               reduce using rule 268 (_expr)
    CONST               [reduce using rule 270 (_expr)]
    STATIC              reduce using rule 268 (_expr)
    STATIC              [reduce using rule 270 (_expr)]
    STDCALL             reduce using rule 268 (_expr)
    STDCALL             [reduce using rule 270 (_expr)]
    API                 reduce using rule 268 (_expr)
    API                 [reduce using rule 270 (_expr)]
    VIRTUAL             reduce using rule 268 (_expr)
    VIRTUAL             [reduce using rule 270 (_expr)]
    PRIVATE             reduce using rule 268 (_expr)
    PRIVATE             [reduce using rule 270 (_expr)]
    PROTECTED           reduce using rule 268 (_expr)
    PROTECTED           [reduce using rule 270 (_expr)]
    PUBLIC              reduce using rule 268 (_expr)
    PUBLIC              [reduce using rule 270 (_expr)]
    CLASS               reduce using rule 268 (_expr)
    CLASS               [reduce using rule 270 (_expr)]
    STRUCT              reduce using rule 268 (_expr)
    STRUCT              [reduce using rule 270 (_expr)]
    UNION               reduce using rule 268 (_expr)
    UNION               [reduce using rule 270 (_expr)]
    COMMA               reduce using rule 268 (_expr)
    COMMA               [reduce using rule 270 (_expr)]
    XOR_A               reduce using rule 268 (_expr)
    XOR_A               [reduce using rule 270 (_expr)]
    BOR_A               reduce using rule 268 (_expr)
    BOR_A               [reduce using rule 270 (_expr)]
    BAND_A              reduce using rule 268 (_expr)
    BAND_A              [reduce using rule 270 (_expr)]
    SHR_A               reduce using rule 268 (_expr)
    SHR_A               [reduce using rule 270 (_expr)]
    SHL_A               reduce using rule 268 (_expr)
    SHL_A               [reduce using rule 270 (_expr)]
    MINUS_A             reduce using rule 268 (_expr)
    MINUS_A             [reduce using rule 270 (_expr)]
    ADD_A               reduce using rule 268 (_expr)
    ADD_A               [reduce using rule 270 (_expr)]
    MOD_A               reduce using rule 268 (_expr)
    MOD_A               [reduce using rule 270 (_expr)]
    DIV_A               reduce using rule 268 (_expr)
    DIV_A               [reduce using rule 270 (_expr)]
    MUL_A               reduce using rule 268 (_expr)
    MUL_A               [reduce using rule 270 (_expr)]
    ASSIGN              reduce using rule 268 (_expr)
    ASSIGN              [reduce using rule 270 (_expr)]
    ARITH_IF            reduce using rule 268 (_expr)
    ARITH_IF            [reduce using rule 270 (_expr)]
    LOG_OR              reduce using rule 268 (_expr)
    LOG_OR              [reduce using rule 270 (_expr)]
    LOG_AND             reduce using rule 268 (_expr)
    LOG_AND             [reduce using rule 270 (_expr)]
    BIN_OR              reduce using rule 268 (_expr)
    BIN_OR              [reduce using rule 270 (_expr)]
    BIN_XOR             reduce using rule 268 (_expr)
    BIN_XOR             [reduce using rule 270 (_expr)]
    BIN_AND             reduce using rule 268 (_expr)
    BIN_AND             [reduce using rule 270 (_expr)]
    SIZEOF              reduce using rule 268 (_expr)
    SIZEOF              [reduce using rule 270 (_expr)]
    BIN_NOT             reduce using rule 268 (_expr)
    BIN_NOT             [reduce using rule 270 (_expr)]
    LOG_NOT             reduce using rule 268 (_expr)
    LOG_NOT             [reduce using rule 270 (_expr)]
    DELETE              reduce using rule 268 (_expr)
    DELETE              [reduce using rule 270 (_expr)]
    NEW                 reduce using rule 268 (_expr)
    NEW                 [reduce using rule 270 (_expr)]
    BINARY_SCOPE        reduce using rule 268 (_expr)
    BINARY_SCOPE        [reduce using rule 270 (_expr)]
    '{'                 reduce using rule 268 (_expr)
    '{'                 [reduce using rule 270 (_expr)]
    '}'                 reduce using rule 268 (_expr)
    '}'                 [reduce using rule 270 (_expr)]
    ';'                 reduce using rule 268 (_expr)
    ';'                 [reduce using rule 270 (_expr)]
    ':'                 reduce using rule 268 (_expr)
    ':'                 [reduce using rule 270 (_expr)]
    '('                 [reduce using rule 268 (_expr)]
    '('                 [reduce using rule 270 (_expr)]
    ')'                 reduce using rule 268 (_expr)
    ')'                 [reduce using rule 270 (_expr)]
    '['                 [reduce using rule 268 (_expr)]
    '['                 [reduce using rule 270 (_expr)]
    ']'                 reduce using rule 268 (_expr)
    ']'                 [reduce using rule 270 (_expr)]
    ','                 reduce using rule 268 (_expr)
    ','                 [reduce using rule 270 (_expr)]
    $default            reduce using rule 268 (_expr)

    begin_list         go to state 141
    assign_op          go to state 287
    function_arg_list  go to state 288
    init_list          go to state 143

state 452

   37 declaration: mod_type_name . tname_expr_list ';'
  101 pointer_expr: . '(' STAR token ')'
  104 tname_expr: .  [ASSIGN, ';', ':', '(', '[', ',']
  105           | . token
  106           | . pointer_expr arg_list
  107           | . '(' scope STAR token ')' end_scope arg_list
  108           | . STAR poss_const tname_expr
  109           | . ADDR tname_expr
  110           | . scope token end_scope
  111           | . scope conversion_operator end_scope
  112           | . tname_expr array_expr
  113           | . pointer_expr array_expr
  114           | . error
  118 token: . TOKEN
  127 init_tname_expr: . tname_expr poss_initialization
  128 tname_expr_list: .  [';']
  129                | . init_tname_expr
  130                | . init_tname_expr ',' tname_expr_list
  199 scope: . typename_expr BINARY_SCOPE
  330 typename_expr: . TYPENAME_FUNCTION
  331              | . template_expr
  332              | . scope typename_expr end_scope
  334 template_expr: . TEMPLATE_NAME_EXPR template_type_list

    error               shift, and go to state 225
    TOKEN               shift, and go to state 226
    TYPENAME_FUNCTION   shift, and go to state 151
    TEMPLATE_NAME_EXPR  shift, and go to state 8
    STAR                shift, and go to state 227
    ADDR                shift, and go to state 228
    '('                 shift, and go to state 229

    ASSIGN  reduce using rule 104 (tname_expr)
    ';'     reduce using rule 104 (tname_expr)
    ';'     [reduce using rule 128 (tname_expr_list)]
    ':'     reduce using rule 104 (tname_expr)
    '('     [reduce using rule 104 (tname_expr)]
    '['     reduce using rule 104 (tname_expr)
    ','     reduce using rule 104 (tname_expr)

    pointer_expr     go to state 230
    tname_expr       go to state 483
    token            go to state 232
    init_tname_expr  go to state 233
    tname_expr_list  go to state 234
    scope            go to state 235
    typename_expr    go to state 130
    template_expr    go to state 132


reply via email to

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