我正在尝试了解 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。