Created
January 13, 2016 06:39
-
-
Save freakboy3742/97672c2e7c9a1c99ffff to your computer and use it in GitHub Desktop.
C++ parser failure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Foo { | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
State : 0 | |
Stack : . LexToken(CLASS,'class',2,1) | |
Action : Reduce rule [declaration_seq_opt -> <empty>] with [] and goto state 2 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 2 | |
Stack : declaration_seq_opt . LexToken(CLASS,'class',2,1) | |
Action : Reduce rule [util -> <empty>] with [] and goto state 3 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 3 | |
Stack : declaration_seq_opt util . LexToken(CLASS,'class',2,1) | |
Action : Reduce rule [start_search1 -> <empty>] with [] and goto state 5 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 5 | |
Stack : declaration_seq_opt util start_search1 . LexToken(CLASS,'class',2,1) | |
Action : Shift and goto state 47 | |
State : 47 | |
Stack : declaration_seq_opt util start_search1 CLASS . LexToken(IDENTIFIER,'Foo',2,7) | |
Action : Reduce rule [class_key -> CLASS] with ['class'] and goto state 84 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 84 | |
Stack : declaration_seq_opt util start_search1 class_key . LexToken(IDENTIFIER,'Foo',2,7) | |
Action : Shift and goto state 53 | |
State : 53 | |
Stack : declaration_seq_opt util start_search1 class_key IDENTIFIER . LexToken({,'{',2,11) | |
Action : Reduce rule [identifier -> IDENTIFIER] with ['Foo'] and goto state 113 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 113 | |
Stack : declaration_seq_opt util start_search1 class_key identifier . LexToken({,'{',2,11) | |
Action : Reduce rule [id -> identifier] with [None] and goto state 171 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 171 | |
Stack : declaration_seq_opt util start_search1 class_key id . LexToken({,'{',2,11) | |
Action : Reduce rule [nested_id -> id] with [None] and goto state 44 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 44 | |
Stack : declaration_seq_opt util start_search1 class_key nested_id . LexToken({,'{',2,11) | |
Action : Reduce rule [scoped_id -> nested_id] with [None] and goto state 283 | |
Result : <NoneType @ 0x1033a0da8> (None) | |
State : 283 | |
Stack : declaration_seq_opt util start_search1 class_key scoped_id . LexToken({,'{',2,11) | |
ERROR: Error : declaration_seq_opt util start_search1 class_key scoped_id . LexToken({,'{',2,11) | |
Traceback (most recent call last): | |
File "/usr/local/lib/python3.4/runpy.py", line 170, in _run_module_as_main | |
"__main__", mod_spec) | |
File "/usr/local/lib/python3.4/runpy.py", line 85, in _run_code | |
exec(code, run_globals) | |
File "/Users/rkm/projects/beeware/seasnake/seasnake/parser.py", line 2118, in <module> | |
parser.parse(preprocessed, debuglevel=10) | |
File "/Users/rkm/projects/beeware/seasnake/seasnake/parser.py", line 124, in parse | |
debug=debuglevel | |
File "/Users/rkm/projects/ply/ply/yacc.py", line 327, in parse | |
return self.parsedebug(input, lexer, debug, tracking, tokenfunc) | |
File "/Users/rkm/projects/ply/ply/yacc.py", line 595, in parsedebug | |
tok = call_errorfunc(self.errorfunc, errtoken, self) | |
File "/Users/rkm/projects/ply/ply/yacc.py", line 193, in call_errorfunc | |
r = errorfunc(token) | |
File "/Users/rkm/projects/beeware/seasnake/seasnake/parser.py", line 2071, in p_error | |
column=self.clex.find_tok_column(p) | |
File "/Users/rkm/projects/beeware/seasnake/seasnake/parser.py", line 102, in _parse_error | |
raise Exception("%s: %s" % (coord, msg)) | |
Exception: Line 2, column 11: before: { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
state 283 | |
(420) class_specifier_head -> class_key scoped_id . colon_mark base_specifier_list { | |
(422) class_specifier_head -> class_key scoped_id . { | |
(418) elaborated_class_specifier -> class_key scoped_id . | |
(419) elaborated_class_specifier -> class_key scoped_id . colon_mark error | |
(417) colon_mark -> . : | |
{ shift and go to state 490 | |
CHAR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
WCHAR_T reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
BOOL reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
SHORT reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
INT reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
LONG reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
SIGNED reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
UNSIGNED reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
FLOAT reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
DOUBLE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
VOID reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
FRIEND reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
TYPEDEF reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
REGISTER reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
STATIC reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
MUTABLE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
EXTERN reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
AUTO reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
EXPLICIT reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
INLINE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
VIRTUAL reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
CONST reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
VOLATILE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
SCOPE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
TEMPLATE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ENUM reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
TYPENAME reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
OPERATOR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
IDENTIFIER reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
CLASS reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
STRUCT reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
UNION reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
[ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
. reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ARROW reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
INC reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
DEC reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
( reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
DOT_STAR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ARROW_STAR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
/ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
% reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
* reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
+ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
- reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
SHL reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
SHR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
< reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
> reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
LE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
GE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
EQ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
NE reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
& reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
^ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
| reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
LOG_AND reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
= reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
? reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
LOG_OR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_ADD reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_AND reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_DIV reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_MOD reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_MUL reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_OR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_SHL reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_SHR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_SUB reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ASS_XOR reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
, reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
: reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
TRY reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
; reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
ELLIPSIS reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
) reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
] reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
# reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
} reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
error reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) | |
! { [ reduce using rule 418 (elaborated_class_specifier -> class_key scoped_id .) ] | |
! : [ shift and go to state 488 ] | |
colon_mark shift and go to state 489 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
state 44 | |
(12) scoped_id -> nested_id . | |
CHAR reduce using rule 12 (scoped_id -> nested_id .) | |
WCHAR_T reduce using rule 12 (scoped_id -> nested_id .) | |
BOOL reduce using rule 12 (scoped_id -> nested_id .) | |
SHORT reduce using rule 12 (scoped_id -> nested_id .) | |
INT reduce using rule 12 (scoped_id -> nested_id .) | |
LONG reduce using rule 12 (scoped_id -> nested_id .) | |
SIGNED reduce using rule 12 (scoped_id -> nested_id .) | |
UNSIGNED reduce using rule 12 (scoped_id -> nested_id .) | |
FLOAT reduce using rule 12 (scoped_id -> nested_id .) | |
DOUBLE reduce using rule 12 (scoped_id -> nested_id .) | |
VOID reduce using rule 12 (scoped_id -> nested_id .) | |
FRIEND reduce using rule 12 (scoped_id -> nested_id .) | |
TYPEDEF reduce using rule 12 (scoped_id -> nested_id .) | |
REGISTER reduce using rule 12 (scoped_id -> nested_id .) | |
STATIC reduce using rule 12 (scoped_id -> nested_id .) | |
MUTABLE reduce using rule 12 (scoped_id -> nested_id .) | |
EXTERN reduce using rule 12 (scoped_id -> nested_id .) | |
AUTO reduce using rule 12 (scoped_id -> nested_id .) | |
EXPLICIT reduce using rule 12 (scoped_id -> nested_id .) | |
INLINE reduce using rule 12 (scoped_id -> nested_id .) | |
VIRTUAL reduce using rule 12 (scoped_id -> nested_id .) | |
CONST reduce using rule 12 (scoped_id -> nested_id .) | |
VOLATILE reduce using rule 12 (scoped_id -> nested_id .) | |
SCOPE reduce using rule 12 (scoped_id -> nested_id .) | |
TEMPLATE reduce using rule 12 (scoped_id -> nested_id .) | |
ENUM reduce using rule 12 (scoped_id -> nested_id .) | |
TYPENAME reduce using rule 12 (scoped_id -> nested_id .) | |
OPERATOR reduce using rule 12 (scoped_id -> nested_id .) | |
IDENTIFIER reduce using rule 12 (scoped_id -> nested_id .) | |
CLASS reduce using rule 12 (scoped_id -> nested_id .) | |
STRUCT reduce using rule 12 (scoped_id -> nested_id .) | |
UNION reduce using rule 12 (scoped_id -> nested_id .) | |
[ reduce using rule 12 (scoped_id -> nested_id .) | |
. reduce using rule 12 (scoped_id -> nested_id .) | |
ARROW reduce using rule 12 (scoped_id -> nested_id .) | |
INC reduce using rule 12 (scoped_id -> nested_id .) | |
DEC reduce using rule 12 (scoped_id -> nested_id .) | |
( reduce using rule 12 (scoped_id -> nested_id .) | |
DOT_STAR reduce using rule 12 (scoped_id -> nested_id .) | |
ARROW_STAR reduce using rule 12 (scoped_id -> nested_id .) | |
/ reduce using rule 12 (scoped_id -> nested_id .) | |
% reduce using rule 12 (scoped_id -> nested_id .) | |
* reduce using rule 12 (scoped_id -> nested_id .) | |
+ reduce using rule 12 (scoped_id -> nested_id .) | |
- reduce using rule 12 (scoped_id -> nested_id .) | |
SHL reduce using rule 12 (scoped_id -> nested_id .) | |
SHR reduce using rule 12 (scoped_id -> nested_id .) | |
< reduce using rule 12 (scoped_id -> nested_id .) | |
> reduce using rule 12 (scoped_id -> nested_id .) | |
LE reduce using rule 12 (scoped_id -> nested_id .) | |
GE reduce using rule 12 (scoped_id -> nested_id .) | |
EQ reduce using rule 12 (scoped_id -> nested_id .) | |
NE reduce using rule 12 (scoped_id -> nested_id .) | |
& reduce using rule 12 (scoped_id -> nested_id .) | |
^ reduce using rule 12 (scoped_id -> nested_id .) | |
| reduce using rule 12 (scoped_id -> nested_id .) | |
LOG_AND reduce using rule 12 (scoped_id -> nested_id .) | |
= reduce using rule 12 (scoped_id -> nested_id .) | |
? reduce using rule 12 (scoped_id -> nested_id .) | |
LOG_OR reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_ADD reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_AND reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_DIV reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_MOD reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_MUL reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_OR reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_SHL reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_SHR reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_SUB reduce using rule 12 (scoped_id -> nested_id .) | |
ASS_XOR reduce using rule 12 (scoped_id -> nested_id .) | |
) reduce using rule 12 (scoped_id -> nested_id .) | |
, reduce using rule 12 (scoped_id -> nested_id .) | |
] reduce using rule 12 (scoped_id -> nested_id .) | |
; reduce using rule 12 (scoped_id -> nested_id .) | |
: reduce using rule 12 (scoped_id -> nested_id .) | |
TRY reduce using rule 12 (scoped_id -> nested_id .) | |
{ reduce using rule 12 (scoped_id -> nested_id .) | |
ELLIPSIS reduce using rule 12 (scoped_id -> nested_id .) | |
# reduce using rule 12 (scoped_id -> nested_id .) | |
} reduce using rule 12 (scoped_id -> nested_id .) | |
error reduce using rule 12 (scoped_id -> nested_id .) |
The full project can be obtained at https://github.com/pybee/seasnake; in a Python 3 virtual environment, install the project, save the sample C++ file, and run python -m seasnake.parser sample.cpp
.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is a partial state machine describing a PLY (Python-Lex-Yacc) grammar for C++.
input.cpp
is the file being parsed. It throws an error when it reaches the opening brace.If I make Foo a subclass of Bar, the grammar works fine. But without the
: public Bar
suffix, it blows up as shown in the runtime output.The problem appears to be with State 258 - but I can't see why it doesn't follow Rule 422, and go to State 490.