我在flex中编写一个简单的扫描仪。我希望我的扫描仪在看到关键字“int”时打印出“看到的整数类型”。以下两种方式有什么区别吗?
第一种方式:%%
int printf("integer type seen");
%%
第二种方式:
%%
"int" printf("integer type seen");
%%
那么,写if
还是"if"
之间有区别吗?另外,例如,当我们看到==
运算符时,我们会打印一些内容。在flex文件中写==
或"=="
之间有区别吗?
答案 0 :(得分:3)
这些特定情况没有区别 - 引号("
)只是告诉lex不解释引用字符串中的任何特殊字符(例如,对于正则表达式),但是如果没有涉及特殊字符,他们无所谓:
[a-z] printf("matched a single letter\n");
"[a-z]" printf("matched the 5-character string '[a-z]'\n");
0* printf("matched zero or more zero characters\n");
"0*" printf("matched a zero followed by an asterisk\n");
特殊且在引号之外表示不同内容的字符包括.
*
+
?
|
^
$
<
>
[
]
(
)
{
}
/
。其中一些只有在某些地方出现时才具有特殊意义,但如果你想匹配字面字符,无论它们出现在何处,都可以更清楚地引用它们。