Search code examples
grammarjavaccleft-recursion

delete left recursion in a grammar


I have this grammar:

agent
 = nil 
 | @ 
 | id 
 | act . agent
 | agent + agent
 | agent "|" agent
 | agent \ restriction
 |  agent [relabeling]
 | agent where agent_frame end
 | automation
 | (agent)

where the priorities are:

"where" < "+" < "|" < "\" < "." < "[" < "nil", "@"

I need to delete the left recursion respecting the priorities ( and write all in JavaCC).

Can you help me to delete recursion?


Solution

  • Dinesh thank you for the answer, your solution give me a conflict in JavaCC with (agent-postfix)*. I solved in this way:

    agent=agent2 agent'
    agent'= "where" agent_frame "end" agent' | epsilon
    
    agent2= agent3 agent2'
    agent2'= "+" agent3 agent2' | epsilon
    
    agent3= agent4 agent3'
    agent3'= "|" agent4 agent3' | epsilon
    
    agent4 = agent5 agent4'
    agent4'= "\" restriction agent4' | epsilon
    
    agent5: act "." agent | agent6
    
    agent6 = agent7 agent6'
    agent6'= "[" relabeling "]" agent6' | epsilon
    
    agent7= id | automaton | "(" agent ")" | "nil" | "@"
    

    but I don't know if this solution is correct.

    Thank you very much.

    Regards Domenico