c - 使用 ANTLR C 目标,如何使用操作来打印 token ?

标签 c antlr antlr3

我是 ANTLR 新手,在使用操作打印 token 时遇到问题。我有以下语法文件:

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”,后跟一个空字符串。

我做错了什么?

提前致谢。

附注我正在使用 ANTLRv3。

最佳答案

试试这个:

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

关于c - 使用 ANTLR C 目标,如何使用操作来打印 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089884/

相关文章:

antlr - 语义谓词失败但不转到下一个

java - ANTLR 通配符运算符不消耗预期输入

使用 fork() 创建 "background running" child 并用信号杀死他们中的每一个

c - Visual Studio C 函数语法错误

c++ - 混合 C 和 C++ 的线程同步

ANTLR 隐式乘法

antlr - 将 ANTLR 语法转换为 Bison/EBNF

.pc 文件 "PCC-S-02015, unable to open include file"和 "PCC-S-02201, Encountered the symbol "size_t""的编译错误

pattern-matching - Antlr 树模式匹配与重写规则

Antlr 错误 : the following token definition can never be matched because prior tokens match the same input