2014-06-18 2 views
4

글쎄, 나는 아래와 같이 문법을 구문 분석하기 위해 재귀 적 하강 구문 분석을 사용하여 함수를 작성해야하는지 잘 모르겠습니다. 사실, 난 ...BNF 문법의 재귀문

BNF 내가 바로 그 일을하고 있는지 확실하지 않습니다 :

A : B | A '!' 
B : '[' ']' 

의사 코드 :

f() 
{ 
    if(tok is B) 
     parse_b(); 
     return somethingB 
    else if(????) how will I know if it's start of A or I don't need to? 
     x = f(); 
     parse_c(); 
     return somethingA 
} 

내가 있는지 확인하기 위해이 (어떤 검사를 수행하지 않았다 그것은 A의하지만 난 뭔가 잘못) 그것으로 거기 느낌 :

f() 
{ 
    if(tok is B) 
     parse_b(); 
     return somethingB 
    else 
     x = f(); 
     parse_c(); 
     return somethingA 
} 
+0

http://stackoverflow.com/questions/16165352/why-cant-a-ll-grammar-be-left-reursive – didierc

+2

어떤 기호가 토큰이고 어떤 기호가 아닌 기호인지는 명확하지 않습니다. B와 C 만 토큰이면 문법을 리팩터링하거나 선견자보다 더 많이 사용해야합니다. –

+0

didierc : 나는 이것을 조사 할 것이다. @ n.m .:은'A : B | '!''더 명확한가요? – Jack

답변

2

내가 SO details on how to build a recursive descent parser에 다른 비슷한 질문에 대답을 참조하십시오.

특히 구문 분석기의 구조를 다루고 목록 처리를 비롯하여 문법 규칙을 검사하여 파생물을 파생시킬 수 있습니다.