5

Cコードを生成したい。入力ファイルから一度に1行ずつ読み取ることはありません(たとえば、コンパイラーのように)。むしろ、ユーザー入力が到着したときに、一度に1行ずつ解析します。

レクサー/パーサーでの不正な入力を検出して処理したいと思います。

/* lexer tokens */
foo : "FOO";
bar : "BAR";
baz : "BAZ";
/* grammar*/
grammar : foo "=" BAZ 
        | foo "=" BAR 
        | <some non-existent Antrl-else> :  {printf(stderr, "bad input\n");}
        ;

OK、レクサー/パーサーでキャッチできない場合は、使用する必要があるようですが、どうすればよいですdisplayRecognitionError()か?

Cコードを生成し、無効な入力のエラー処理を示す非常に単純な例を誰かに教えてもらえますか?

ありがとう!


OK、賞金、yippee!

しかし、実際に機能するコードを使用した、実際に機能する答えの場合のみです。wxampleなしで「メソッドX()を使用する」ことはできません。

4

2 に答える 2

7

あなたが探している可能性が最も高いのはdisplayRecognitionError()関数です。この関数は、関心のある場合に呼び出され、Cランタイムの一部です。

この関数の使用例を知りたい場合は、このメーリングリストの投稿をご覧ください。このコードはCとC++を組み合わせたものですが、そこから必要なものを理解できるはずです。

于 2010-01-13T15:15:31.643 に答える
5

Javaでの認識例外の処理は、次のようになります。

grammar X;

// ...

@rulecatch{
  catch(RecognitionException rex) {
    // do something
  }
}

// parser rules

// lexer rules 

つまり、@rulecatch{ ... }ブロック内にカスタムCコードを追加するだけです。

于 2010-01-05T10:49:31.653 に答える