编译原理实验报告(词法分析器语法分析器)

编 译 原 理 实 验 报 告

实验一

一、实验名称:词法分析器的设计

二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。 三、实验要求:给出一个简单语言单词符号的种别编码词法分析器 四、实验原理:

1、词法分析程序的算法思想

算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 2、程序流程图 (1)主程序

输出单词符号二元组 结束 调用扫描、分析程序 判断读入字符是否为“#” 输入要分析的语句

(2)扫描子程序

Token清空 Get() 当前字符=? 标示符 常数 表中查找 结束 Error() 基本字 用户标示符 输出二元式 结束 3、各种单词符号对应的种别码 单词符号 while if else switch case 标识符 种别码 1 2 3 4 5 6 助记符 while if else switch case id 内码值 - - - - - id在符号表中的位置 常数 7 num num在常数表中的位置 + - * <= < == = ; 8 9 10 11 11 11 12 13 + - * relop relop relop = ; - - - LE LT EQ - -

五、实验内容:

1、实验分析

编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s( char型),i,j,k(int型),a[]用来存放输入的字符串,token[]另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token[])来判断标识符和保留字。

2 实验词法分析器源程序: #include #include #include int i,j,k;

char c,s,a[20],token[20]={'0'}; int letter(char s){ if((s>=97)&&(s<=122)) return(1); else return(0); }

int digit(char s){ if((s>=48)&&(s<=57)) return(1); else return(0); }

void get(){ s=a[i]; i=i+1; }

void retract(){ i=i-1; }

int lookup(char token[20]){ if(strcmp(token,\ else if(strcmp(token,\ else if(strcmp(token,\ else if(strcmp(token,\ else if(strcmp(token,\ else return(0); }

void main() { printf(\ :\\n\ i=0; do{i=i+1; scanf(\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4