2017-03-31 1 views
0

Antlrを使用して.Net用のScript-Interpreterを作成しました。それはかなりうまく動作しますが、それが生成する構文エラーは恐ろしいものです。 初期の開発段階のライブラリはhereであり、使用される文法はecma-Script grammarに基づいています。意味のある構文解析エラーをantlrパーサーから受け取りました

今、大きな問題は、私は大規模なスクリプトファイルを持っていると私は

obj = { var1 = "hello" 
     var2 = "world}; 

を言うオブジェクト定義を持っているとき、私は予想ラインXYZで「構文エラーというメッセージを 『』期待していること、です。 しかし、カンマが足りないために発生したすべてのフォローアップエラーのために、xyzに実行可能な100個の代替リストを取得しないでください。

カンマがないために発生するエラーが1つありますか?予期せぬvar2トークンについて不平を言うならば、まったく問題ありません。

答えて

0

さてあなたはこのために2つのアプローチを使用することができます:あなたが最も可能性が高い以下の「エラー」のトンを引き起こすと表示されているから、その後すべてのエラーを抑制しますエラーを認識するかどうかをチェックし

  • 。そのため、エラーを修正する前にエラーを修正しなければなりません。ただし、ANTLRが生成する潜在的なメッセージは変更されません。
  • 一般的なエラーの代替方法を文法に直接追加し、エラーリスナーが呼び出されたときに通知します。これでエラーメッセージを自分で指定することができます。このトピックの詳細については、これについての章があるDefinitive ANTLR 4 referenceを参照するか、不平衡型ブラケットにこの方法を使用するa grammar of mineを参照してください。

第2のアプローチを使用する場合、文法が指定された入力と正常に一致し、したがって適切に続行できるため、次の誤った「エラー」も取り除く必要があります。
したがって、私はあなたに2番目のアプローチを強くお勧めします

+0

タンクは大変です。私はすでに最初のアプローチを使用しようとしました。問題は、他のすべての原因となった「初期エラー」をそのようにすることはできないということです。とにかく、2番目のアプローチは完全に機能し、文法で説明している方法で最も一般的な構文エラーを意味のあるものに警告することができました。 –

関連する問題