Flex lexer Flex中的单行或多行字符串检测

Flex lexer Flex中的单行或多行字符串检测,flex-lexer,lex,lexical-analysis,Flex Lexer,Lex,Lexical Analysis,我已经写了一个flex程序来检测给定的单词是否是动词。将从文本文件中获取输入。我想改进代码。是否有任何方法可以检测输入文件中的单行或多行字符串(例如:“我是男孩”或“我是男孩\我喜欢足球”)。在这种情况下,输出将是“找到单/多行字符串”,这是我希望从程序中得到的。我该怎么做?请帮忙。这是我的示例代码: %% [\t]+ is | am | are | was | were {printf("%s: is a verb",yytext);} [a-zA-Z]+ {prin

我已经写了一个flex程序来检测给定的单词是否是动词。将从文本文件中获取输入。我想改进代码。是否有任何方法可以检测输入文件中的单行或多行字符串(例如:“我是男孩”或“我是男孩\我喜欢足球”)。在这种情况下,输出将是“找到单/多行字符串”,这是我希望从程序中得到的。我该怎么做?请帮忙。这是我的示例代码:

%%

[\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);
}

Flex生成一个扫描器,扫描器通常用于识别单个标记,在本例中是单词或换行符。它只从输入中读取足够的字符来确定这个特定的标记是什么,并且除了这个标记之外没有任何前瞻性。如果您想在输入中的某个位置发现换行符时执行某些操作(作为令牌序列之一),则最好由解析器处理,例如由Yacc或Bison生成的解析器。

将单个规则添加到lexer中以识别字符串(可以跨越多行):


(我整理了一下,重点放在字符串与无字符串的演示上。)

它们没有正确解决,先生。你能给我一个在代码中编辑的示例代码吗。我不明白@Brian Tompsett
%%
["][^"]*["] {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);
}