2013-10-08 3 views
1

그래서, 무엇이 궁금 파서 같은 :정확하게 antlr에서 문법 규칙을 왼쪽 재귀 적으로 만드는 것은 무엇입니까?

line  : expression EOF; 
expression : m_expression (PLUS m_expression)?; 
m_expression: basic (TIMES basic)?; 
basic  : NUMBER | VARIABLE | (OPENING expression CLOSING) | expression; 

재귀 왼쪽 무효,

line  : expression EOF; 
expression : m_expression (PLUS m_expression)?; 
m_expression: basic (TIMES basic)?; 
basic  : NUMBER | VARIABLE | (OPENING expression CLOSING); 

같은 파서가 유효하고 '기본'의 정의는 여전히 의미에도 불구하고 작동하는 동안 '표현'. 특히 두 개 이상의 피연산자에 대해 연산을 수행하지 않고

a+b+c 

의 표현식을 구문 분석 할 수 있기를 바랍니다.

답변

1

line calls 표현식 호출 m_expression은 expression ...을 호출하는 basic을 호출합니다. 이는 간접적으로 v3 antlr과 v4 모두에 재귀 적으로나 나쁘게 남아 있습니다. 왼쪽 재귀의 정의는 토큰을 소비하지 않고 동일한 규칙으로 돌아갈 수 있음을 의미합니다. 두 번째 인스턴스의 expression 앞에 OPENING 토큰이 있습니다.

관련 문제