1

私の言語にキーワードを追加したいと思います。

このキーワードは、1 つの特定のパーサー文法規則でのみ一致する必要があります。

下位互換性のため、このキーワードを引き続き変数名として使用できるようにしたいと思います。つまり、トークンが変数名に適しているかどうかを判断するレクサー規則に一致させることができます。

レクサーは、新しいルールがファイル内で見つかるたびに一致させます。

IDENT または新しい KEYWORD トークンのいずれかに一致するように var_declaration ルールを変更するために、これを回避する適切な方法はありますか?

protected
modified_var_declaration:
     VAR (IDENT|KEYWORD);
;

関連するルールは次のとおりです。

IDENT   // matches variable names
options { testLiterals=true; }
    : ( '_' | 'a'..'z' | 'A'..'Z' ) ( '_' | 'a'..'z' | 'A'..'Z' | DIGIT )*
;

KEYWORD: // my new keyword
  "key"
;

変数を作成するためのパーサー規則は次のとおりです。

protected
var_declaration:
     VAR IDENT;
;
4

2 に答える 2

1

多くの言語には、文脈依存のキーワードがあります。identそれらを処理するための最初のステップは、変数名を表す新しいパーサー規則を追加することです。の代わりにパーサーでそのルールを使用してくださいIDENT

ident
    : IDENT
    | KEYWORD
    ;
于 2009-10-25T04:36:39.703 に答える
1

あなたを助けるはずのhttp://www.antlr.org/wiki/display/ANTLR3/1.+Lexerをチェックしてください。「KEYWORD」が許可される場合、フラグを設定および設定解除する必要があります。

KEYWORD : { keywordcontext }?=> "key";

ここでの秘訣は、キーワードを期待できる場所を切り替えることですが、これは些細なことではありません。

于 2012-12-03T09:42:24.957 に答える