麻烦得到简单的flex的例子工作
Trouble getting simple flex example to work
我试图遵循本教程,我目前卡在第一个代码片段:
%{
#include <iostream>
using namespace std;
#define YY_DECL extern "C" int yylex()
%}
%%
[ tn] ;
[0-9]+.[0-9]+ { cout << "Found a floating-point number:" << yytext << endl; }
[0-9]+ { cout << "Found an integer:" << yytext << endl; }
[a-zA-Z0-9]+ { cout << "Found a string: " << yytext << endl; }
%%
main() {
// lex through the input:
yylex();
}
这首先给了我一个错误,因为缺乏返回类型的主要,所以改变代码如下:
%{
#include <iostream>
using namespace std;
#define YY_DECL extern "C" int yylex()
%}
%%
[ tn] ;
[0-9]+.[0-9]+ { cout << "Found a floating-point number:" << yytext << endl; }
[0-9]+ { cout << "Found an integer:" << yytext << endl; }
[a-zA-Z0-9]+ { cout << "Found a string: " << yytext << endl; }
%%
int main() {
// lex through the input:
yylex();
return 0;
}
运行:flex snazzle.l
可以正常工作,但是当我执行下一步时:
g++ lex.yy.c -lfl -o snazzle
它说:
clang: warning:在c++模式下将'c'输入处理为'c++',此行为已弃用没有找到-lfl的库Clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
怎么回事?我用的是flex 2.5.35 Apple(flex-31)
,如果重要的话…谢谢。
clang报错文件名是lex.yy。c但是你正在用"g++
"编译它(怎么变成clang++
,我不知道,但这将与苹果发布的工具链有关;这可能是个符号链接。)正如警告所说,这样做是不可取的。这些都与flex
无关。你可以告诉flex你想输出一个c++文件:
flex -o lex.yy.cc snazzle.l
尽管就个人而言,我会将输出文件命名为更时髦的名称,如snazzle.lex.cc
。无论您将其命名为什么,它都应该以.cc
结尾,以将其标记为c++文件。或者你可以使用.cpp
或.cxx
或.c++
或其他一些扩展,我不记得了。
第二个错误告诉您flex
库-lfl
没有安装,或者至少它没有安装在任何标准位置。而不是试图找到那个库,我个人只是添加
%option noyywrap
到您的伸缩输入。把它放在第一行%%
之前。这告诉flex没有yywrap
函数,这反过来意味着当输入文件达到EOF时,它实际上是一个EOF。当输入到达EOF时调用yywrap
,允许更改输入文件并返回0,表示lex操作应该继续。显然,本教程不需要这个特性——它只是偶尔有用,一般来说——fl
库包含yywrap
的定义,它精确地做到了这一点:
int yywrap() { return 1; }
您可以将其添加到您的文件中,但是添加noyywrap
选项同样容易,在这种情况下,生成的词法分析器根本不需要yywrap
函数。
我也遇到过同样的问题。
下面是解决方案:
1. 使用lex.yy.cc代替lex.yy.c作为输出文件。
flex -o lex.yy.cc snazzle.l
使用ll标志代替lf1
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 麻烦得到简单的flex的例子工作