小编mel*_*iko的帖子

在 bison 中使用字符文字作为终端

我正在尝试了解 flex/bison,但文档对我来说有点困难,而且我可能严重误解了某些内容。这是一个测试用例:http : //namakajiri.net/misc/bison_charlit_test/

文件“a”包含单个字符“a”。“foo.y”有一个像这样的简单语法:

%%

file: 'a' ;
Run Code Online (Sandbox Code Playgroud)

生成的解析器无法解析文件“a”;它给出了一个语法错误。

语法“bar.y”几乎相同,只是我更改了命名标记的字符文字:

%token TOK_A;

%%

file: TOK_A;
Run Code Online (Sandbox Code Playgroud)

然后在 bar.lex 中:

a       { return TOK_A; }
Run Code Online (Sandbox Code Playgroud)

这个工作得很好。

我在尝试将字符文字直接用作野牛终端时做错了什么,就像在文档中一样?

我希望我的语法看起来像“statement: selector '{' property ':' value ';' '}'" 而不是 "statement: selector LBRACE property COLON value SEMIC RBRACE"...

我在 debian wheezy 中运行 bison 2.5 和 flex 2.5.35。

c yacc lex bison flex-lexer

5
推荐指数
1
解决办法
2009
查看次数

标签 统计

bison ×1

c ×1

flex-lexer ×1

lex ×1

yacc ×1