2017-05-19 4 views
0

Ich versuche, wie Syntax mit indent/Dedent Grammatik für Jade zu implementieren:Jison Grammatik für Jade-ähnliche Syntax

div 
    p id="text" 

Aber ich habe Probleme mit EOF haben:

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

Grammatik: https://gist.github.com/antonmedv/7615a5322dec1736db60a87897f17f01

Was mache ich falsch?

+0

Bei SO fragen wir, dass Fragen in sich abgeschlossen sind (nicht auf Code auf anderen Diensten verweisen) und dass Codebeispiele vollständig und minimal sind. Ich habe deine Frage trotzdem beantwortet, aber es wäre für zukünftige Leser hilfreich, wenn du sie editieren würdest, um einen [mcve] anstelle des GitHub-Links einzuschließen. Vielen Dank. – rici

Antwort

0

Sie generieren DEDENT-Tokens nur, wenn Sie das erste Nicht-Leerzeichen in einer Zeile sehen. Bei EOF gibt es kein solches Zeichen, daher werden die endgültigen DEDENTs niemals erzeugt. Die DEDENTs werden von Ihrer Grammatik benötigt, daher erhalten Sie bei EOF einen Syntaxfehler.

Ihre EOF-Regel muss den Einrückungsstapel bereinigen, bevor das Ende der Datei gemeldet wird.

+0

Ich reparierte fehlende dedents, aber immer noch denselben Fehler, können Sie mir helfen, es zu lösen? –

+0

@Anton: Das wird schwierig, ohne deinen Code zu sehen :-) Hast du meinen Kommentar zu deiner Frage gelesen? Wie auch immer, ich denke, deine erste Debugging-Übung würde darin bestehen, den Lexer zu überschreiben, um die erzeugten Tokens zu drucken und zu überprüfen, dass sie (a) wie erwartet sind und (b) die Grammatik erfüllen. (In der Tat sollten Sie in der Lage sein, den Lexer einfach wiederholt aufzurufen, um einen Token-Stream auszugeben; Sie müssen keine vollständige Debugging-Schnittstelle implementieren :)) – rici

+0

Danke. Will versuchen, jeden Token zu drucken, oder lexer selbst zu implementieren. –