c语言中局部颜色的语法,内容:选择部分C语言的语法成分,设计其词法分析程序,要求能够处理.doc...

本文档描述了一个C语言的词法分析器设计,该分析器能处理注释、部分复合运算符和关键字。实验要求包括给出词法规则、状态转换图、单词种别编码方案以及算法思想。程序通过读取源代码,识别单词符号、标识符、关键字、常数、运算符和界符。词法分析器首先忽略空格,然后根据首字符识别单词类型,如关键字、标识符或数字。程序使用C语言编写,能够输出分析结果。
摘要由CSDN通过智能技术生成

内容:选择部分C语言的语法成分,设计其词法分析程序,要求能够处理

编译原理实验报告

题目:词法分析器

实验内容

选择部分C语言的语法成分,设计其词法分析程序,要求能够处理注释、部分复合运算符(如++等)。

实验要求

要给出所分析语言的词法说明,相应的状态转换图,单词的种别编码方案,词法分析程序的主要算法思想等。

例C源程序待分析段:

main()

{

int A,B,C,D; /*类型说明*/

A=2; B=4; C=10; D=100;

while (A

{

if (A==1) C=C-1;

else while (A

{A=A+2;}

}

}

实验分析:

用C语言编写一个词法分析器,使之能够识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出。输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,利用手工输入获取源程序代码,再核对该源程序代码进行词法分析,这就是词法分析器的基本功能,当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号,当缓冲区里的字符串处理完之后,它又调用预处理子程序类似处理新串。

1)实验要求及设计方案:

关键字:"if","else","for","do","while","switch","case","int","char","main"

运算符和界符:; = - + / < > { } ( ) * # , ! ++ --

其他符号:

ID = letter( letter | digit)*

NUM = digit digit*

空格由空白、制表符和换行符组成。空格ID、NUM、运算符、界符、关键字有空格隔开,但空格在分析中忽略。

2)单词符号的种别编码方案:

单词符号种别码单词符号种别码if1*15else2/16for3=17do4<18while5<=19case6>20switch7>=21int8,25char9;26 main10(27letter(letter|digit)*11)28digit digit*12{29}30+13++36-14--35

3)程序的主要算法思想和主要函数的算法思想及流程:

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

词法分析主程序示意图:

三个变量:token存放单词字符串;sum存放整形单词;syn存放单词种别码

流程图:

程序代码:

#include"stdio.h"

#include"iostream.h"

#include"string.h"

#include"ctype.h"

char prog[120],token[8];

char ch;

int syn,p,m,n,sum;

char *rwtab[10]={"if","else","for","do","while","switch","case","int","char","main"};//数组定义关键字

void scaner(){

m=0;

for(n=0;n<8;n++)//初始化token数组

token[n]='\0';

ch=prog[p++];//存放扫描到的单词或字符的缓冲区

while(isspace(ch))

ch=prog[p++];

if(isalpha(ch)){//判断是否为字母

while(isalnum(ch)){//判断是否为字母或数字

token[m++]=ch;

ch=prog[p++];

}

--p;//回退字符

syn=10;

for(n = 0; n < 10; n++)

if(strcmp(token,rwtab[n])==0){

syn=n+1;

break;

}

}//字母开头

else

if(isdigit(ch))//数字判断

{

sum=0;

while(isdigit(ch)){

sum =sum*10+ch-'0';

ch=prog[p++];

}

p--;

syn=11;

}

else{

m=0;

//根据扫描到的运算符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值