[Top][All Lists]
[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
- Updating UnderC C/C++ interpreter and reduce/reduce conflicts,
Domingo Alvarez Duarte <=