我写了一个flex程序来检测给定的单词是否是动词。输入将从文本文件中获取。我想改进代码。有没有办法在输入文件中检测单行或多行字符串(例如:"我是男孩"或者#34;我是男孩\我喜欢足球")。在这种情况下,输出将是"找到单/多行字符串"这是我想要的程序。我怎么能这样做?请帮忙。这是我的示例代码:
%%
[\t]+
is |
am |
are |
was |
were {printf("%s: is a verb",yytext);}
[a-zA-Z]+ {printf("%s: is a verb",yytext);}
. |\n
%%
int main(int argc, char *argv[]){
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
答案 0 :(得分:1)
向词法分析器添加单个规则以识别字符串(可以分布在多行中)非常容易:
%%
["][^"]*["] {printf("'%s': is a string\n", yytext); }
[a-zA-Z]+ {printf("%s: is a word\n",yytext); }
[ \t\n]+
.
%%
int main(int argc, char *argv[]){
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
(我整理了一下,专注于字符串vs无字符串演示。)
答案 1 :(得分:0)
Flex生成扫描仪,扫描仪通常用于识别单个令牌,在本例中为单词或换行符。它只从输入中读取足够的字符来确定此特定令牌是什么,并且除此之外没有任何前瞻。如果你想在输入中的某个位置找到换行符时做某事,作为一系列标记之一,那么解析器可以更好地处理它,例如由Yacc或Bison生成的解析器。