实验一--词法分析实验报告.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
词法分析实验报告 1. 实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 2. 实验要求 2.1 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 : = + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter " digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符 和关键字,词法分析阶段通常被忽略。 2.2 各种单词符号对应的种别码: 表2.1 各种单词符号对应的种别码 "单词符号 "种别码 "单词符号 "种别码 " "bgin "1 ": "17 " "If "2 ":= "18 " "Then "3 "< "20 " "wile "4 "<> "21 " "do "5 "<= "22 " "end "6 "> "23 " "lettet(letter"d"10 ">= "24 " "igit)* " " " " "dight dight* "11 "= "25 " "+ "13 "; "26 " "— "14 "( "27 " "* "15 ") "28 " "/ "16 "# "0 " 2.3 词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思 想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 3.1 主程序示意图: 主程序示意图如图3-1所示。其中初始包括以下两个方面: 关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描 程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为 一般标识符。关键字表为一个字符串数组,其描述如下: Char *rwtab[6] = {"begin", "if", "then", "while", "do", "end",}; 否 是 图1 (2)程序中需要用到的主要变量为syn,token和sum 3.2 扫描子程序的算法思想: 首先设置3个变量: token用来存放构成单词符号的字符串; sum用来整型单词; syn 用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。 是 是 否 字母 数字 其他 运算符、 符号 界符等符号 否 是 图 2 四、词法分析程序的C语言程序源代码 #include <stdio.h> #include <string.h> char prog[80],token[8],ch; int syn,p,m,n,sum; char *rwtab[6]={"begin","if","then","while","do","end"}; scaner(); main() {p=0; printf("\n please input a string(end with '#'):/n"); do{ scanf("%c",&ch); prog[p++]=ch; }while(ch!='#'); p=0; do{ scaner(); switch(syn) {case 11:printf("( %-10d%5d )\n",sum,syn); break; case -1:printf("you have input a wrong string\n"); getch(); exit(0); default: printf("( %-10s%5d )\n",token,syn); break; } }while(syn!=0); getch(); } scaner() { sum=0; for(m=0;m<8;m++)token[m++]=NULL; ch=prog[p++]; m=0; while((ch==' ')""(ch=='\n'))ch=prog[p++]; if(((ch<='z')&&(ch>='a'))""((ch<='Z')&&(ch>='A'))) { while(((ch<='z')&&(ch>=
- 粉丝: 168
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助