2017-05-19 5 views
0

내가 들여 쓰기/dedent와 구문과 같은 옥에 대한 문법을 ​​구현하기 위해 노력하고있어 :Jison 문법 옥 같은 구문

div 
    p id="text" 

하지만 EOF에 문제가있어 :

Error: Parse error on line 4: 
div p id="text" 
----------------^ 
Expecting 'DEDENT', 'IDENTIFIER', got 'EOF' 

문법 : https://gist.github.com/antonmedv/7615a5322dec1736db60a87897f17f01

내가 뭘 잘못하고 있니?

+0

SO에서 우리는 자체 서비스 (다른 서비스의 코드를 가리 키지 않음)와 완전한 코드 샘플을 요구합니다. 어쨌든 귀하의 질문에 답변했지만 미래 독자가 github 링크 대신 [mcve]를 포함하도록 편집하면 도움이됩니다. 감사. – rici

답변

0

줄에 첫 번째 공백이 아닌 문자가있는 경우에만 DEDENT 토큰을 생성합니다. EOF에는 그러한 성격이 없으므로 최종 DEDENT는 절대로 생성되지 않습니다. DEDENT는 문법에 필요하므로 EOF에서 구문 오류가 발생합니다.

EOF 규칙은 파일 끝을보고하기 전에 들여 쓰기 스택을 플러시해야합니다.

+0

누락 된 첨부 자료를 수정했지만 여전히 동일한 오류가 발생합니다. 해결하도록 도와 줄 수 있습니까? –

+0

@Anton : 코드를 보지 않고서는 어려울 것입니다 :-) 당신의 질문에 대한 제 코멘트를 읽었습니까? 어쨌든 첫 번째 디버깅 연습은 렉서가 생성하는 토큰을 인쇄하고 (a) 예상대로하고 (b) 문법을 충족하는지 확인하기 위해 렉서를 무시하는 것입니다. 실제로 토큰 스트림을 출력하기 위해 렉서 (lexer)를 반복적으로 호출 할 수 있어야하며 전체 디버깅 인터페이스를 구현할 필요는 없습니다.) – rici

+0

고마워요. 각 토큰을 인쇄하거나 자체적으로 렉서를 구현하려고합니다. –