gpt4 book ai didi

lex - Flex++ 错误字符错误等等。刚接触 Flex

转载 作者:行者123 更新时间:2023-12-02 11:58:50 25 4
gpt4 key购买 nike

我们刚刚开始使用 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: bad character: % calc.l:1: unknown error processing section 1
calc.l:1: unknown error processing section 1
calc.l:1: unknown error processing section 1
calc.l:2: unrecognised '%' directive

有人可以帮我理解我在这里做错了什么吗?干杯

最佳答案

你可以尝试这样的事情:

  • 添加%{ ... %}到文件的前几行
  • 添加#include <iostream>using namespace std; (而不是尝试定义扫描仪)
  • 添加%option noyywrap 规则部分上方
  • 仅使用 yylex() (而不是尝试调用不存在的扫描器的方法)
<小时/>

根据您的示例,它可能看起来像这样:

%{
#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;
}

关于lex - Flex++ 错误字符错误等等。刚接触 Flex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com