定义 lex 替换字符串

您可以定义字符串宏,当 lex 程序生成词法分析器时,它将扩展这些字符串宏。

先定义它们,然后再定义第一个%%lex 规范文件中的定界符。 此部分中以列 1 开头且不在列之间的任何行%{%}定义 lex 替换字符串。 替换字符串定义有下面的一般格式:
name                     translation

其中nametranslation由至少一个空格或制表符分隔,并且指定的名称以字母开头。 当 lex 程序找到定义的字符串时name封入{}(花括号) 在规范文件的规则部分中,它会将该名称更改为在以下内容中定义的字符串:translation并删除花括号。

例如,要定义名称DE,将以下定义放在第一个%%规范文件中的定界符:
D           [0-9]
E           [DEde][-+]{D}+
然后,在说明文件的规则部分使用这些名称使得规则更简短:
{D}+                             printf("integer");
{D}+"."{D}*({E})?                |
{D}*"."{D}+({E})?                |
{D}+{E}                          printf("real");
您也可在定义部分包含下面的项:
  • 字符集表
  • 启动条件的列表
  • 为了容纳更大的源程序而对数组大小作出的更改