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