图 13.17 LEX功能示意图
  正像YACC那样,LEX也可以借助宿主语言C或RATFOR描述动作,LEX自动地把表示输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序。它有一个固定的名字为yylex,yylex是一个C语言(或RATFOR语言)程序。经C语言编译程序编译后可运行,它的功能就是对输入串识别出单词符号,并可做相应的动作。
  例如,把输入串的小写字母转换成相应的大写字母,可有如下的LEX源程序。
  %%
  [a-z] printf("%c", yytext[0]+'A'-'a');
  其中%%是分界符,表示识别规则的开始,[a-z]是识别小写字母的规则,printf()是识别出小写字母时采取的动作,即将小写字母变换成相应的大写字母。yytext[0]是工作单元,是用以存放yylex识别的字符或字符串自身的值。
  LEX的工作原理是将LEX源程序中的正规式转换成相应的确定有限自动机,将其动作插入到yylex中适当的地方。控制流是由确定的有限自动机的解释器完成,解释器是LEX的构成部分,像YACC中的驱动程序一样,它对不同的输入源程序来说解释器是相同的。对于LEX的详细说明,请参阅附录[B]。
考虑问题:
  ① 编译程序的实现应考虑的问题有那些?
  ② 编译程序的实现途径有那些?