First make the indirect recursion to an immediate one via eliminating D. You only have two nonterminals, so it can be done. S --> C C --> Cdc|dc|c Then you can work on making it tail-recursive: S --> C C --> dcC'|cC' C'--> dcC' The trick in the second part...

recursion,antlr,ll,left-recursion

No, ANTLR did not say your grammar is left recursive. It complained about the fact that some rules have non-LL(*) decisions due to recursive rule invocations. Rewrite the following rules as follows and you'll be alright: sql_query : select_statement from_statement where_statement? ; attribute_list : '*' | attribute_name (',' attribute_list?)? ;...

parsing,compiler-construction,grammar,left-recursion

No, this grammar is not SLR. It is ambiguous. Left recursion is not a problem for LR parsers. Left recursion elimination is only necessary for LL parsers. ...

java,parsing,javacc,left-recursion

You can solve this with syntactic look ahead. void Condition() : {}{ <NOT> Condition() | LOOKAHEAD(Expression() (<EQUAL_CHECK> | <NOT_EQUAL> | <LESS> | <LESS_EQUAL> | <GREATER> | <GREATER_EQUAL>)) Expression() (<EQUAL_CHECK> | <NOT_EQUAL> | <LESS> | <LESS_EQUAL> | <GREATER> | <GREATER_EQUAL>) Expression() | <OPEN_PARENTHESIS> Condition() (<AND> | <OR>) Condition() <CLOSE_PARENTHESIS> } ...

context-free-grammar,left-recursion,chomsky-normal-form

Yes, CNF allows any form of recursion.

parsing,recursion,compiler-construction,recursive-descent,left-recursion

What's the difference between factor and term? using the same example I am not giving the same example as it won't give you clear picture of what you have doubt about! Given, term ::= term * factor | factor factor ::= number | (expression) Now,suppose if I ask you...

parsing,left-recursion,grammars

if this is all of the grammar then of course you can: A -> e if not please provide more of your homework ;)...

parsing,antlr,grammar,visitor,left-recursion

After writing out this question it got me thinking a little bit more functionally Long story short, I'm using the grammar expr : | expr (plus|minus) expr | expr (multi|div) expr | '(' expr ')' | literal ; plus : '+' ; minus : '-' ; multi : '*' ;...

antlr,grammar,antlr4,left-recursion

It has been confirmed that this is a bug. The fix is scheduled for the next milestone 4.x. See https://github.com/antlr/antlr4/issues/564