gpt4 book ai didi

c++ - 为什么程序不返回 YYText() 或 YYLeng()?

转载 作者:行者123 更新时间:2023-11-28 08:09:37 25 4
gpt4 key购买 nike

我正在尝试创建一个词法分析器,它将返回文本文件中标记的长度。

我有一个文本文件,里面只有一个字母“a”。

下面是我的lex.l文件

%option noyywrap 
%{
%}

/* regular definitions */
delim [ \t\n]
ws {delim}+
letter [A-Za-z]
digit [0-9]

%%

{ws} {/* no action */}
letter {return 1;}

%%

以下是使用 YYText() 和 YYLeng() 函数的主程序文件。

#include <stdio.h>
#include <stdlib.h>
#include "lex.yy.cc"

using namespace std;

int OpenInputOutput(int argc, char *argv[], ifstream & lexerFIn, ofstream & lexerFOut)
{
// open input
if (argc > 1) {
lexerFIn.open(argv[1]);
if (lexerFIn.fail()) {
cerr << "Input file cannot be opened\n";
return 0;
}
}
else {
cerr << "Input file not specified\n";
return 0;
}

// open output
lexerFOut.open("Output.txt");
if (lexerFOut.fail()) {
cerr << "Output file cannot be opened\n";
return 0;
}
}

int main(int argc, char *argv[])
{
yyFlexLexer lexer;
while (lexer.yylex() != 0) {
cout << lexer.YYText() << endl;
cout << lexer.YYLeng() << endl;
}
return 0;
}

当我使用上述文本文件运行程序时,使用命令 ./a“sample.txt”,它会在文件上写入“a”。为什么它不计算 YYText() 或 YYLeng() 或在输出文件中写入字符的长度?

最佳答案

您只能调用YYTextYYLeng在解析器匹配了一个标记之后。你不能在解析任何东西之前调用它们。您正在检索从未发生过的匹配项的属性。

这与随机检索 errno 的值是同一个问题.

关于c++ - 为什么程序不返回 YYText() 或 YYLeng()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449533/

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