lex输入文件解析.
格式:

The general format of lex source shall be:

Definitions

%%

Rules

%%

UserSubroutines</pre>

Definions:这个有两部分

  • lex 定义文件中使用的变量
    在%{ 和%}之间的内部的是C声明, 简单的将它们拷贝下来,发送最终输出文件的开头.
    另外的是lex的变量定义(以及其他一些东西,我们忽略)
    每一行是name  substitute  对.空格分割.name必须是一个合法的C变量名.
    在这里和规则定义部分将{name}替换成substitute.
    也就是说这里可能有嵌套的定义.
  • 规则定义部分
    这部分以%% 开始,以 %% 结束.
    分两列RE       ACTION
    两个之间的分割符为空格(或其他空字符比如\t)
    注意ACTION 可能出现多行的情况,一般情况下会还有{和}把ACTION包围起来.(不过lex规范没有定义这一点)
    对于RE中出现的空白字符,必须符合下面的条件</p>
    • 整个表达式在双引号中
    • 空白字符出现在双引号或[]中
    • 每个空白字符有一个前导反斜杠

    正则表达式中可能出现{name}需要用第一部分定义的substitute  替换.
    然后我们把用两个数组分别记录RE和ACTION 就可以了.</li>

    • 用户自定义的函数
      简单的将拷贝到输出文件就可以了.</ul>