我们刚刚开始使用flex为项目构建词法分析器,但是我们无法弄清楚如何让它工作.我复制教程中给出的示例代码,并尝试以tut文件作为参数运行flex ++,但每次只收到一个错误.例如
输入文件(calc.l)
%name Scanner
%define IOSTREAM
DIGIT [0-9]
DIGIT1 [1-9]
%%
"+" { cout << "operator <" << yytext[0] << ">" << endl; }
"-" { cout << "operator <" << yytext[0] << ">" << endl; }
"=" { cout << "operator <" << yytext[0] << ">" << endl; }
{DIGIT1}{DIGIT}* { cout << " number <" << yytext << ">" << endl; }
. { cout << " UNKNOWN <" << yytext[0] << ">" << endl; } …Run Code Online (Sandbox Code Playgroud) 注意:有超过1500代表的人..请添加flex ++和bison ++作为标签:).
好像互联网上的人一直在使用Flex ++遇到以下错误:
scanner.l:1: bad character: %
scanner.l:1: unknown error processing section 1
Run Code Online (Sandbox Code Playgroud)
在我给Flex ++的任何例子中都会发生这种情况.我的版本来自这里,我已经尝试了该页面上的确切示例,但我仍然遇到这些错误.我已经尝试过在Linux和Mac上完全没有想法了!
似乎Flex ++也是旧病毒的名称,所以特别难以得到有用的讨论!
编辑:
这是一个产生上述错误的示例(从上面的链接中获取的示例中的前几行):
%name CalcScanner
%define IOSTREAM
%define LEX_PARAM YY_CalcParser_STYPE *val, YY_CalcParser_LTYPE *loc
%define MEMBERS public: int line, column;
%define CONSTRUCTOR_INIT : line(1), column(1)
%header{
#include<sstream>
#include "parser.h"
%}
Run Code Online (Sandbox Code Playgroud)
任何帮助都不仅仅是太棒了.
编辑2:请允许人们通过将'flex'标签放入?来编辑此帖子吗?Flex将是我用来标记的,但Flex也是一种Adobe技术 - 它不是我使用的工具.SO上的flex标签用于Adobe产品(因此标签上的徽标).谢谢 :).
我在 Debian Squeeze 上运行,并使用 apt-get install flex 安装了 flex/flex++。
不过我注意到 flex++ 只是一个指向 flex 的符号链接。那么,真的存在一个生成 C++ 扫描仪的“程序”flex++,还是只是一个我应该切换的 Flex 标志?
另外,常见的问题是:互联网上的许多示例无法在flex或flex++下“编译”。Flex 出现以下错误:
test.lex:1: invalid character: %
...
Run Code Online (Sandbox Code Playgroud)
当仅使用以下命令处理输入时:
%name Test
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?
Flex/Flex++ 版本为 2.5.35