2012-04-10 56 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')+; 

測試程序如下:

#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」,後面跟着一個空字符串。

這是什麼,我做錯了?

在此先感謝。

P.S.我正在使用ANTLRv3。

回答

1

試試這個:

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