I am trying to create my own recursive descent parser in python, but when my parser runs into a rule concerning arithmetic expressions, it surpasses the python recursion limit. Here is the grammar:
Term --> Factor {( "+" | "-" ) Factor}
Factor --> Grouping {( "*" | "/" | "%" ) Grouping}
Grouping --> Expression | "(" Expression ")" | "-" Factor
Expression --> Integer | Float | Tuple | ID | Term
The curly braces in the grammar denote that they can repeat (but also is optional), and are implemented using a while loop in my parser. I feel that what is causing this is the fact that a Grouping
rule can be and Expression
(whcih can recur over and over because the right side of the Factor
and Term
rule are optional).
What I am asking is: Is there a way to implement the left recusion with a recursive descent parser or eliminate it in my grammar somehow?
EDIT: I was browsing around and iit seem this type of recursion is called indirect left recursion, perhaps this has something to do with it?