2012-04-10 39 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); 
    } 
;