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?