3

Antlr2には、設定できる文法オプションが多数ありました(参照)。現在、Antlr3には、オプションの量の3分の1があります(参照)。

だから私はこれに関して2つの質問があります:

  1. なぜこれほど多くのオプションが削除され、そのうちのいずれかが戻ってくるのか誰かが知っていますか?
  2. Antlr3には、これらすべてのオプションがなくても、Antlr2ができることを実行する機能がありますか?

2番目の質問をより具体的に言うと、いくつかのことができるようになりたいと思います。まず、生成されたレクサークラスとパーサークラス(つまり、Antlr2オプション "classHeaderPrefix")の可視性を変更したいと思います。

次に、「&keyword&」と「&k ey wo rd&」の両方が一致するなど、特定のキーワード内で見つかった空白トークンを無視できるようにしたい(つまり、Antlr2オプション「ignore」だと思いますか?)。

最後に、特定のキーワードで大文字と小文字を区別しないようにします(つまり、Antlr2オプション "caseSensitive")。

4

1 に答える 1

2

BluePlateSpecialは書いた

2番目の質問をより具体的に言うと、いくつかのことができるようになりたいと思います。まず、生成されたレクサークラスとパーサークラス(つまり、Antlr2オプション "classHeaderPrefix")の可視性を変更したいと思います。

v3では、これを行う方法はありません。

BluePlateSpecialは書いた

次に、「&keyword&」と「&k ey wo rd&」の両方が一致するなど、特定のキーワード内で見つかった空白トークンを無視できるようにしたい(つまり、Antlr2オプション「ignore」だと思いますか?)。

レクサーのLL(*)アルゴリズムは、v2で使用されていたものよりもはるかに強力であるため、このオプションは削除された可能性があります。さて、これはトリックを行うので、そのようなオプションの必要はありません:

FOO
  :  '&' (' ' | 'a'..'z')+ '&'
  ;

BluePlateSpecialは書いた

最後に、特定のキーワードで大文字と小文字を区別しないようにします(つまり、Antlr2オプション "caseSensitive")。

これは、v3では「ハード」な方法以外では不可能です。

BAR
  :  ('b' | 'B') ('a' | 'A') ('r' | 'R')
  ;
于 2011-01-09T09:58:37.083 に答える