0

私はANTLRを初めて使用し、アクションを使用してトークンを印刷することに問題があります。次の文法ファイルがあります。

grammar SimpleGrammar;

options {
language = C;
}

prog : string { printf("hello\n"); printf($string.text); };

string : LETTER+;

LETTER : ('a'..'b' | 'A'..'B')+;

テストプログラムは次のとおりです。

#include "SimpleGrammarLexer.h"
#include "SimpleGrammarParser.h"

int main(int argc, char * argv[]) {
    pANTLR3_INPUT_STREAM input;
    pSimpleGrammarLexer lex;
    pANTLR3_COMMON_TOKEN_STREAM tokens;
    pSimpleGrammarParser parser;

    input = antlr3FileStreamNew((pANTLR3_UINT8)argv[1], 0);
    lex = SimpleGrammarLexerNew(input);
    tokens = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lex));
    parser = SimpleGrammarParserNew(tokens);

    parser -> prog(parser);

    parser -> free(parser);
    tokens -> free(tokens);
    lex -> free(lex);
    input -> close(input);

    return 0;
}

入力ファイルには、「AAAA」という単純な文字列が含まれています。出力が改行で「hello」の後に「AAAA」が続くことを期待していますが、「hello」の後に空の文字列が続くだけです。

私が間違っているのは何ですか?

前もって感謝します。

PS私はANTLRv3を使用しています。

4

1 に答える 1

1

代わりにこれを試してください:

prog
 : string 
   { 
     printf("hello\n"); 
     printf($string.text->chars); 
   }
 ;
于 2012-04-10T15:34:57.460 に答える