qianjigui 发表于 2013-1-27 04:58:55

Lex 编译器入门

<div style="padding: 4px 5.4pt; width: 95%;">http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifLex工具
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif-------
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifLex工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序,由该程序识别出输入文本中的各个单词。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif1、lex程序的结构
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif-定义部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif-规则部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif-用户子程序部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif其中规则部分是必须的,定义和用户子程序部分是任选的。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif(1) 定义部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif定义部分起始于"%{"符号,终止于"%}"符号,其间可以是包括include语句、声明语句在内的C语句。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif%{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif#include "stdio.h"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif#include "y.tab.h"
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifextern int lineno;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif%}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif(2) 规则部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif规则部分起始于"%%"符号,终止于"%%"符号,其间则是词法规则。词法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由C语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别出来的单词存放在yytext []字符数据中,因此该数组的内容就代表了所识别出来的单词的内容。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif%%
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[] {;}
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif[0-9]+.?[0-9]*.[0-9]+
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif{ sscanf(yytext,"%1f", &yylval.val);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifreturn NUMBER; }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif  { lineno++;return '' ''; }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif. { return yytex+[0]; }
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif%%
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif(3) 用户子程序部分
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif用户子程序部分可以包含用C语言编写的子程序,而这些子程序可以用在前面的动作中,这样就可以达到简化编程的目的。下面是带有用户子程序的lex程序片段。
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif"/*" skipcmnts();
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif. /* rest of rules */
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif%%
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifskipcmnts()
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.giffor ( ; ; )
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif{
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifwhile (input()!=''*'');
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifif(input()!=''/'')
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifunput(yytext[yylen-1]);
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifelse return;
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif} 
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
页: [1]
查看完整版本: Lex 编译器入门