编译原理词法分析和语法分析 本资源摘要信息主要介绍了编译原理中的词法分析和语法分析过程,并提供了相关的源代码和实验设计。 一、实验目的 设计并调试一个词法分析程序,以加深对词法分析原理的理解。通过该实验,学生可以了解词法分析的基本思想和算法,并掌握词法分析程序的设计和实现。 二、实验要求 2.1 待分析的简单的词法 * 关键字:begin, if, then, while, do, end * 运算符和界符:=, +, -, *, /, <, <=, <> , >, >= , ; , ( , ) , # * 其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* * 空格有空白、制表符和换行符组成。 2.2 各种单词符号对应的种别码 单词符号种别码单词符号种别码 bgin 1 If 2 Then 3 while 4 do 5 end 6 letter 10 digit 11 + 13 - 14 * 15 / 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 所示。其中初始包括以下两个方面: ⑴ 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。 3.2 扫描子程序的算法思想 扫描子程序主要部分流程如图 3-2 所示。首先设置 3 个变量:① token 用来存放构成单词符号的字符串;② sum 用来整型单词;③ syn 用来存放单词符号的种别码。 四、词法分析程序的 C 语言程序源代码 以下是词法分析程序的 C 语言程序源代码: ```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"); break; } } while (1); return 0; } ```
剩余21页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助