Flex ++糟糕的字符错误等等。 新的flex
我们刚刚开始使用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; }
%%
int main(int argc, char ** argv)
{
Scanner scanner;
scanner.yylex();
return 0;
}
与此代码我得到
flex ++ calc.l
calc.l:1:错误字符:%calc.l:1:未知错误处理部分1
calc.l:1:未知的错误处理部分1
calc.l:1:未知的错误处理部分1
calc.l:2:无法识别的'%'指令
任何人都可以帮助我理解我在这里做错了什么? 干杯
你可能会尝试如下所示:
%{ ... %}
添加到文件中的前几行 #include <iostream>
并using namespace std;
(而不是试图定义扫描仪) %option noyywrap
yylex()
(而不是试图调用不存在的Scanner的方法) 用你的例子,它可能看起来像这样:
%{
#include <iostream>
using namespace std;
%}
DIGIT [0-9]
DIGIT1 [1-9]
/* read only one input file */
%option noyywrap
%%
"+" { 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; }
%%
int main(int argc, char** argv)
{
yylex();
return 0;
}
什么是你使用的flex ++的版本? 我使用'Function:基于2.3.8的快速词法分析器生成器C / C ++ V2.3.8-7(flex ++),并通过coetmeur@icdc.fr对c ++'( - ?option)进行修改,并且完全处理您的cacl.c ..
对于Win32,这个版本的Flex ++ / Bison ++就在这里
链接地址: http://www.djcxy.com/p/9921.html上一篇: Flex++ bad character error and more. new to flex
下一篇: ASP.NET MVC 3: Moved app into virtual directory. What do I have to change?