Я пытаюсь создать лексический анализатор, который будет возвращать длину токена в текстовом файле.
У меня есть текстовый файл с одной буквой «а».
Ниже приведен мой файл 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 () и не записывает длину символа в выходной файл?