用C语言进行Lex编码
我想使用Lex获取并打印双引号内的文本用C语言进行Lex编码,c,text,lex,C,Text,Lex,我想使用Lex获取并打印双引号内的文本 ["]?([A-Z]*[a-z]*[0-9]*)*["]? { printf("STR(%s ),yytext"); return 1; } 我用过这个,但有点不对劲,我想不出来 例如: 输入 输出 STR("CNG230 ASN1 Average") STR("CNG230/492 Global average") 例2: 输入 输出 STR("CNG230 ASN1 Average") STR("CNG230/492 Global aver
["]?([A-Z]*[a-z]*[0-9]*)*["]? {
printf("STR(%s ),yytext");
return 1;
}
我用过这个,但有点不对劲,我想不出来
例如:
输入
输出
STR("CNG230 ASN1 Average")
STR("CNG230/492 Global average")
例2:
输入
输出
STR("CNG230 ASN1 Average")
STR("CNG230/492 Global average")
您的主要问题似乎是您的模式不允许将空格作为有效字符。您也不需要对匹配非常复杂:
["]?[A-Za-z0-9 ]*["]? {
printf("STR(%s)\n", yytext);
return 1;
}
请注意,我还为
printf()
提供了一个要打印的值,并在末尾输出了一个换行符,以便您能够及时看到信息。您实际上并没有说您的示例有什么问题,我假设
printf("STR(%s ),yytext");
只是一个拼写错误
printf("STR(%s )",yytext);
但我可以看到两个问题
\"[^"]*\" { ... }
.|\n {}
这是一个很好的解释,谢谢,但是在应用了这段代码之后,我得到了一个错误,它说行号和规则不能匹配,还有另一个例子,它包含像/。那么,关于以下部分可以,但需要了解如何创建[“]?[A-Za-z0-9]*[“]?以正确的方式?谢谢。我不可能调试你没有显示的内容。该片段本身(前缀为
%%
,后跟%%
),可以编译成一个独立的程序,当我在其上键入“abc def”
时,它会以STR(“abc def”)
响应。所有这些都符合你的要求。在看不到更多扫描仪的情况下,没有人能告诉你其余的代码有什么问题。我成功地做到了这一点,但它就像STR(“C)STR(N)…我怎么可能用STR(“CNG230 ASN1 Average”)格式呢?