grammar - ANTLR4 Mutually Left-recursive Error When Parsing C++ Source -


i'm trying parse subset of cpp source syntax. follow antlr4 parser rules directly copied c++ language specification (except hypens replaced underscores):

abstract_declarator:     ptr_operator abstract_declarator?   |  direct_abstract_declarator ; direct_abstract_declarator:     direct_abstract_declarator? '(' parameter_declaration_clause ')' cv_qualifier_seq? exception_specification?    |   direct_abstract_declarator? '[' constant_expression? ']'    |   '(' abstract_declarator ')' ; 

but got error when org.antlr.v4.tool parsing grammar:

error(119): cppprocessor.g4::: following sets of rules mutually left-recursive [direct_abstract_declarator]

it seems direct_abstract_declarator? syntax @ left hand side causes error. how should correct it? why can't antlr4 support it?

manually refactoring rules form doesnt produce error:

direct_abstract_declarator:        direct_abstract_declarator '(' parameter_declaration_clause ')' cv_qualifier_seq? exception_specification?      |  '(' parameter_declaration_clause ')' cv_qualifier_seq? exception_specification?      | direct_abstract_declarator '[' constant_expression? ']'      | '[' constant_expression? ']'       | '(' abstract_declarator ')' 

so possible antlr4 support first syntax directly when handling left recursive rules?

antlr 4 supports direct left recursion, not indirect or hidden left recursion. can address situation above explicitly expanding optional construct.

direct_abstract_declarator    :   direct_abstract_declarator '(' parameter_declaration_clause ')' cv_qualifier_seq? exception_specification?    |   direct_abstract_declarator '[' constant_expression? ']'    |   '(' parameter_declaration_clause ')' cv_qualifier_seq? exception_specification?    |   '[' constant_expression? ']'    |   '(' abstract_declarator ')' ; 

Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -