教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

实验一词法分析器的设计

来源:网络收集 时间:2026-07-26
导读: 实验一 词法分析器的设计 一、实验目的 (1)学会针对转换图实现相应的高级语言源程序。 (2)深刻领会状态转换图的含义,逐步理解有限自动机。 二、实验内容 (1)某计算机语言的编译程序的词法分析部分实现。 (2)从左到右扫描每行该语言源程序的符号,拼

实验一 词法分析器的设计

一、实验目的

(1)学会针对转换图实现相应的高级语言源程序。

(2)深刻领会状态转换图的含义,逐步理解有限自动机。

二、实验内容

(1)某计算机语言的编译程序的词法分析部分实现。

(2)从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token),送给语法分析程序。

三、实现原理

程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之。

PL/0语言的EBNF表示

<常量定义>::=<标识符>=<无符号整数>;

<标识符>::=<字母>={<字母>|<数字>};

<加法运算符>::=+|-

<乘法运算符>::=*|/

<关系运算符>::==|#|<|<=|>|>=

<字母>::=a|b| |X|Y|Z

<数字>::=0|1|2| |8|9

四、设计过程

1. 关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf 并为小写。

2."+”;”-”;”*”;”/”;”:=“;”:”;”<“;”<=“;”>“;”>=“;”<>“;”=“;”(“;”)”;”;”;”#”为运算符。

3. 其他标记 如字符串,表示以字母开头的标识符。

4. 空格符跳过。

5. 各符号对应种别码

关键字分别对应1-13

运算符分别对应401-418,501-513。

字符串对应100

常量对应200

结束符#

五、心得体会

其实匹配并不困难,主要是C++知识要求相对较高,只要把握住指针就好了。

附源程序:

#include<iostream.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int i,j,k,flag,number,status;

/*status which is use to judge the string is keywords or not!*/

char words[10] = {" "};

char program[500];

int Scan(char program[])

{

char *keywords[13] = {"void","main","if","then","break","int", "char","float","include","for","while","printf",

"scanf"};

number = 0;

status = 0;

j = 0;

ch = program[i++];

/* To handle the lettle space ands tab*/

/*handle letters*/

if ((ch >= 'a') && (ch <= 'z' ))

{

while ((ch >= 'a') && (ch <= 'z' ))

{

words[j++]=ch;

ch=program[i++];

}

i--;

words[j++] = '\0';

for (k = 0; k < 13; k++)

if (strcmp (words,keywords[k]) == 0)

switch(k)

{

case 0:{

flag = 1;

status = 1;

break;

}

case 1:{

flag = 2;

status = 1;

break;

}

case 2:{

flag = 3;

status = 1;

break;

}

case 3:{

status = 1;

break;

}

case 4:{

flag = 5;

status = 1;

break;

}

case 5:{

flag = 6;

status = 1;

break;

}

case 6:{

flag = 7;

status = 1;

break;

}

case 7:{

flag = 8;

status = 1;

break;

}

case 8:{

flag = 9;

status = 1;

break;

}

case 9:{

flag = 10;

status = 1;

break;

}

case 10:{

flag = 11;

status = 1;

break;

}

case 11:{

flag = 12;

status = 1;

break;

}

flag = 13;

status = 1;

break;

}

}

if (status == 0)

{

flag = 100;

}

}

/*handle digits*/

else if ((ch >= '0') && (ch <= '9')) {

number = 0;

while ((ch >= '0' ) && (ch <= '9' )) {

number = number*10+(ch-'0');

ch = program[i++];

}

flag = 200;

i--;

}

/*opereation and edge handle*/

else switch (ch)

{

case '=':{

if (ch == '=')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 401;

}

else

{

i--;

flag = 402;

}

break;

}

if (ch == '>')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 403;

}

else

{

i--;

flag = 404;

}

break;

}

case'<':{

if (ch == '<')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 405;

}

else

{

i--;

flag = 406;

}

break;

}

case'!':{

if (ch == '!')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 407;

}

else

{

i--;

flag = 408;

}

break;

}

case'+':{

if (ch == '+')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 409;

}

else if (ch == '+')

{

words[j++] = ch;

words[j] = '\0';

flag = 410;

}

else

{

i--;

flag = 411;

}

break;

}

case'-':{

if (ch == '-')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; if (ch == '=')

{

words[j++] = ch;

words[j] = '\0';

flag = 412;

}

else if( ch == '-')

{

words[j++] = ch;

words[j] = '\0';

flag = 413;

}

else

{

i--;

flag = 414;

}

break;

}

case'*':{

if (ch == '*')

words[j++] = ch;

words[j] = '\0';

ch = program[i++]; …… 此处隐藏:2665字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验一词法分析器的设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/268371.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)