Flex lexer 如何使我的FLEX程序在某些时候忽略特殊字符?

Flex lexer 如何使我的FLEX程序在某些时候忽略特殊字符?,flex-lexer,Flex Lexer,我正在为稍后的计算器程序编写一个简单的标记化程序。现在,我已经将程序编码为每当用户输入“f”时输出“FALSE”。我目前正在做的是,当用户输入“//”后跟一个字符串时,程序输出“COMMENT://string I entered”。这是我的问题:因为我有“f”和其他单字符编程来做其他事情,我的程序目前创建这种类型的输出: **User enters:** //Protoypes **Desired Output:** COMMENT: //Prototypes **Actual Out

我正在为稍后的计算器程序编写一个简单的标记化程序。现在,我已经将程序编码为每当用户输入“f”时输出“FALSE”。我目前正在做的是,当用户输入“//”后跟一个字符串时,程序输出“COMMENT://string I entered”。这是我的问题:因为我有“f”和其他单字符编程来做其他事情,我的程序目前创建这种类型的输出:

**User enters:**

//Protoypes

**Desired Output:**

COMMENT: //Prototypes

**Actual Output:**

COMMENT: // Pro

TRUEo

TRUEypes
有人有办法解决这个问题吗

以下是迄今为止的代码:

%{

#include <stdio.h>

%}

%%

"//"    printf("\nCOMMENT: // ", yytext);

"("     printf("\nLPAREN");

")"     printf("\nRPAREN");

"="     printf("\nASSIGN");

"F"     printf("\nFALSE");

"T"     printf("\nTRUE");

"and"   printf("\nAND");


"bye"   printf("\nQUIT");

"else"  printf("\nELSE");

"exit"  printf("\nQUIT");

"f"     printf("\nFALSE");

"false" printf("\nFALSE");

"if"    printf("\nIf");

"implies"       printf("\nIMPLIES");

\n      printf("\nNEWLINE");

"not"   printf("\nNOT");

"or"    printf("\nOR");

"quit"  printf("\nQUIT");

"stop"  printf("\nQUIT");

"t"     printf("\nTRUE");

"then"  printf("\nTHEN");

"true"  printf("\nTRUE");

"xor"   printf("\nXOR");


%%
main(){
    yylex();
}
%{
#包括
%}
%%
“/”printf(“\n注释:/”,yytext);
“(“printf”(“\nLPAREN”);
“”“printf(“\nParen”);
“=”printf(“\n符号”);
“F”printf(“\n假”);
“T”printf(“\nrue”);
“和”printf(“\nAND”);
“再见”printf(“\n退出”);
“else”printf(“\nELSE”);
“退出”printf(“\n退出”);
“f”printf(“\n假”);
“假”printf(“\n假”);
“如果”printf(“\nIf”);
“表示”printf(“\nIMPLIES”);
\n printf(“\n基线”);
“非”printf(“\n不”);
“或”printf(“\nOR”);
“退出”printf(“\n退出”);
“停止”打印(“\n取消”);
“t”printf(“\nrue”);
“然后”printf(“\n次”);
“真”打印F(“\n打印”);
“xor”printf(“\nXOR”);
%%
main(){
yylex();
}

您需要一个最终规则来捕获其他任何内容并忽略它。默认情况下,打印任何不匹配的输入:

. ;

当然可以谢谢你的回复。我将编辑我的原始评论以包含代码。谢谢您的回答。我将其应用于我的程序,结果是:用户输入://prototype,输出:COMMENT//TRUE NEWLINE。它忽略了我没有特别指定的一切。我是否做了错误的操作?不,您只需要为要识别的内容设置更多规则,或者可能希望此“.”规则返回“yytext[0]”,而不是什么都不做。不知道你的解析器,不可能说出哪个。