下载后可任意编辑实验二 C-语言的词法分析器(基于 Lex)1.课程设计目标自动构造 C-语言的的词法分析器,要求能够掌握编译原理的基本理论,,理解编译程序的基本结构,掌握编译各阶段的基本理论和技术,掌握编译程序设计的基本理论和步骤.,增强编写和调试高级语言源程序的能力,掌握词法分析的基本概念和实现方法,熟悉 C-语言的各种 Token。。2.分析与设计基于 Parser Genarator 的词法分析器构造方法Lex 输入文件由 3 个部分组成:定义集(definition),规则集(rule)和辅助程序集(auxiliary routine)或用户程序集(user routine)。这三个部分由位于新一行第一列的双百分号分开,因此,Lex 输入文件的格式如下{definitions}%%{rules}%%{auxiliary routines}而且第一部分用“%{”和“%}”括起来。第一和第三个部分为 C 语言的代码和函数定义,第二个部分为一些规则。定义正则表达式如下 ID = letter letter*NUM = digit digit*Letter = a|…|z|A|…|ZDigit = 0|…|9Keyword = else|if|int|return|void|whileSpecial symbol = +|-|*|/|<|<=|>|>=|==|!=|=|;|,|(|)|[|]|{|}|/*|*/White space = “ ”Enter = \n在 lex 中的构造letter [A-Za-z]digit [0-9]id ({letter}|[_])({letter}|{digit}|[_])*error_id ({digit})+({letter})+ num {digit}+whitespace [ \t]+enter [\n]+在 Lex 中的规则定义构造定义识别保留字规则"int"|"else"|"return"|"void"|"if"|"while" 下载后可任意编辑{Upper(yytext,yyleng);printf("%d 行 ",lineno);printf("%s reserved word\n",yytext);}//保留字定义识别数字规则{num} {printf("%d 行 ",lineno);printf("%s NUM\n",yytext);}//数字定义识别专用符号规则","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/" {printf("%d 行 ",lineno);printf("%s special symbol\n",yytext);}//特别符号定义识别标识符规则{id} {printf("%d 行 ",lineno); printf("%s ID\n",yytext);}//标识符定义识别错误的字符串规则当开头为数字的后面为字母的字符串时,是错误的标识符。{error_id} {printf("error:%s\n",yytext);}//以数字开头的字符自动报错定义忽略空格规则{whitespace} {/* skip whitespace */}//忽略空格定义忽略回车规则{enter} {lineno++;}//遇到回车自动加行号忽略辅助程序集中包括主函数 main ...