私が次のものを持っているとしましょう:
variableDeclaration: Identifier COLON Type SEMICOLON;
Type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;
ここで、これらのT_名は、「integer」、「char」などとして定義されています。
ここで、LittleLanguageというテストプログラムのexitVariableDeclarationメソッドを使用しているとします。LittleLanguageLexer.T_INTEGER(など)を参照することはできますが、コンテキストからこれらのタイプのどれが見つかったかを判断する方法がわかりません。
私はそうなると思っていましたがcontext.Type().getSymbol().getType()
、それは正しい値を返しません。)を使用できることはわかってcontext.Type().getText(
いますが、文字列の比較はしたくありません。
何が足りないのですか?
ありがとう
トークンを時期尚早に組み合わせると、レクサーの情報が失われます。パーサールールで組み合わせる方がよい:
variableDeclaration: Identifier COLON type SEMICOLON;
type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;
さて、type
その根底にあるトークンのインスタンスのユニークなタイプを持ってTerminalNodeは以下のとおりです。
variableDeclarationContext ctx = .... ;
TerminalNode typeNode = (TerminalNode) ctx.type().getChild(0);
switch(typeNode.getSymbol().getType()) {
case YourLexer.T_INTEGER:
...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加