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

Single or Multi Line Strings detection in Flex

我写了一个 flex 程序来检测给定的单词是否是动词。输入将取自文本 file.I 想要改进的代码。有什么方法可以检测输入文件中的单行或多行字符串(比如:"I am a boy" 或 "I am a boy \ I love football")。在这种情况下,输出将是 "single/multi line string is found" 这就是我想要从我的程序中得到的。我该怎么做?请帮忙。这是我的示例代码:

%%

[\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 生成的解析器。

向词法分析器添加一条规则来识别字符串(可以分布在多行)非常容易:

%%
["][^"]*["] {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);
}

(我稍微整理了一下以专注于字符串与无字符串演示。)