lex

时间:2016-01-17 04:31:58

标签: c formatting lex

我是编写lex文件的新手,我不确定我是否正确格式化文件。我尝试从C源文件中捕获C关键字,然后使用前缀格式字符串将其打印出来。

我的尝试是(显示部分关键字列表):

%%

auto|do|goto|short    printf("%s%s", "formatting", yytext);

在我看过的一些例子中,第一列中的单词被双引号括起来。这是必要的,还是我正确格式化了我的lex文件以捕获我列出的关键字?

那就是我应该写的:

"auto"|"do"|"goto"|"short"    printf("%s%s", "formatting", yytext);

何时需要双引号?

1 个答案:

答案 0 :(得分:2)

当模式文本包含正则表达式运算符或空格时,必须使用双引号。每当模式文本不仅仅包含字母和数字时,使用它们可能是个好主意。

对于简单的字母关键字,它们显然不是必需的。如果模式文本已经使用 \ 进行了转义,也没有必要使用它们,因此您可以在不加引号的情况下编写\n

实际上,双引号不是必需的。有几种方法可以转义字符,但双引号的优点是能够引用几个连续的字符。但是,以下情况也可以:

[a][u][t][o]|[d][o]...

有时用于手动不区分大小写:

[aA][uU][tT][oO]|[dD][oO]...

Flex允许您使用标记语法 - (?i:auto|do|goto|short)指定模式段的不区分大小写 - 但这是一个flex扩展,因此您仍然可以看到如上所述的模式。