2012-04-10 6 views
0

私はANTLRが新しく、アクションを使用してトークンを印刷することに問題があります。次のようにANTLR Cターゲットを使用して、アクションを使用してトークンを印刷するにはどうすればよいですか?

grammar SimpleGrammar; 

options { 
language = C; 
} 

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

string : LETTER+; 

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

テストプログラムは次のとおりです:「AAAA」:

#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; 
} 

入力ファイルは、単純な文字列が含まれている私は、次の文法ファイルを持っています。私は出力が "hello"に続いて改行で "AAAA"となることを期待していますが、空の文字列が続く "hello"しか得られません。

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

ありがとうございます。

P.S.私はANTLRv3を使用しています。

答えて

1

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

prog 
: string 
    { 
    printf("hello\n"); 
    printf($string.text->chars); 
    } 
; 
関連する問題