1

私はAntlrが初めてです。CSSパーサーを実装しようとしています。まず、この文法を使用してパーサーを生成しています。私はガイドとしてこのチュートリアルに従っています。Antlr 3.4 を使用して C# でコードを生成しています (次は、Antlr 4.0 も使用してみます)。

私はいくつかの問題に直面しており、インターネット上でそれらを明確に理解できるリソースを見つけることができませんでした。

私が抱えている問題:

  1. さまざまなタイプ (エラー、警告) でカスタマイズされたエラー メッセージを生成します。これは Antlr で提供されていますか。これを達成する方法を理解するために、いくつかのリソースを提供してください。

  2. 私がフォローしているチュートリアルでは、解析と字句解析で例外をキャッチできました。しかし、私が試した文法では、この次のコードを追加して間違ったcssコンテンツでテストしても、エラーは発生しません。

    partial class CSS3Lexer
    {
        public override void ReportError(RecognitionException e)
        {
            base.ReportError(e);
            Console.WriteLine("Error in lexer at line " + e.Line + ":" + e.CharPositionInLine + e.Message);
        }
    }
    
  3. エラーのリスト (パーサー エラーとレクサー エラー) をある種のデータ構造 (エラー タイプ、メッセージ、場所を持つエラー オブジェクトのリスト) に収集して、別のタスクに使用できるようにしたいと考えています。これを行うためのより意味のある方法はありますか。

私はまだよりエレガントなデザインに到達することができないので、私のアプローチについても提案をしたいと思います.

4

1 に答える 1

2

ANTLR に組み込まれている唯一のエラー報告メカニズムは非常に単純で、特定のエラーにエラー カテゴリや番号を与える方法はありません。多くの場合、解析時に発生するすべての構文エラーには、同じエラー番号が付けられます。たとえば、ANTLR 4 ツールは、パーサー エラーをエラー 50 として報告します。

最初の解析が完了し、解析ツリー (ANTLR 4) または AST (ANTLR 3) が利用可能になったら、引き続きセマンティック評価を実行できます。それ以降に識別されるエラーは、全体的な影響に応じて、エラーまたは警告のいずれかと見なすことができます。これに使用するデータ構造は、特定の UI コンポーネントにエラー/警告を報告する必要がある Visual Studio や NetBeans 拡張機能など、アプリケーション固有の場合がありますが、それ以外の場合は、意味のある方法で自由に定義できます。

于 2013-07-24T11:22:26.027 に答える