2017-05-19 3 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)文法を満たしていることを確認するために、レクサーをオーバーライドすることだと思います。 (実際には、トークンストリームを出力するためにレクサーを繰り返し呼び出すことができるはずです;完全なデバッグインターフェイスを実装する必要はありません:)) – rici

+0

ありがとう。各トークンを印刷するか、レクサーを自分で実装しようとします。 –