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 $...@16 TOKEN 276 | _expr . ARROW $...@17 TOKEN 278 | _expr . MEMBER_ARROW $...@18 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 _______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison