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