1022词法分析程序源代码

#include <stdio.h>
#include <string.h>

char prog[80],token[8],ch; //token是存放的字符串 ch是字符 prog是缓冲区
int syn,p,m,n,sum; //syn是种别码 p是缓冲区prog的指针 m是token的指针 n是指针数组rwtab的下标 sum是存放整数型的字
char *rwtab[6]={"begin","if","then","while","do","end"}; //定义关键字

void scaner(void) ;
main()
{
p=0;
printf("\n Please input the source code:\n");

do{
scanf("%c",&ch); //储存输入代码
prog[p++]=ch;
}while(ch!=‘#‘);

p=0;
do{
scaner();
switch(syn)
{
case 11:
printf("( %d,%d )\n",syn,sum);
break;

case -1:
printf("you have input a wrong string\n");
return 0;
break;

default:
printf("( %d,%s )\n",syn,token);
break;
}
}while(syn!=0);

printf(" Over.\n");
}

void scaner(void)
{
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>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))
{
token[m++]=ch; //除6个关键字之外的字符的处理
ch=prog[p++];
}

p--;
syn=10;

for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0) //判断是哪个关键字
{
syn=n+1;
break;
}
}
else if((ch>=‘0‘)&&(ch<=‘9‘))
{
while((ch>=‘0‘)&&(ch<=‘9‘))
{
sum=sum*10+ch-‘0‘;
ch=prog[p++];
}
p--;
syn=11;
}
else
{
switch(ch)
{
case ‘<‘:
token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;
p--;
}
break;

case ‘>‘:
token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;
p--;
}
break;

case ‘+‘:
token[m++]=ch;
ch=prog[p++];
if(ch==‘+‘)
{
syn=17;
token[m++]=ch;
}
else
{
syn=13;
p--;
}
break;

case ‘-‘:
token[m++]=ch;
ch=prog[p++];
if(ch==‘-‘)
{
syn=29;
token[m++]=ch;
}
else
{
syn=14;
p--;
}
break;

case ‘=‘:
token[m++]=ch;
ch=prog[p++];
if(ch==‘=‘)
{
syn=25;
token[m++]=ch;
}
else
{
syn=18;
p--;
}
break;

case ‘*‘: syn=15;token[m++]=ch; break;
case ‘/‘: syn=16;token[m++]=ch; break;
case ‘(‘: syn=27;token[m++]=ch; break;
case ‘)‘: syn=28;token[m++]=ch; break;
case ‘;‘: syn=26;token[m++]=ch; break;
case ‘#‘: syn=0;token[m++]=ch; break;
case ‘:‘: syn=17;token[m++]=ch; break;
default: syn=-1; break;
}
}
token[m++]=‘\0‘;
}

时间: 2024-11-11 00:02:35

1022词法分析程序源代码的相关文章

词法分析程序源代码

#include<stdio.h> #include<string.h> #include<stdlib.h> char TOken[10];//分开进行比较 char ch; char r1[]={"auto"}; char r2[]={"break"}; char r3[]={"case"}; char r4[]={"char"}; char r5[]={"const"

1022 词法分析程序

1 #include <stdio.h> 2 #include <string.h> 3 4 char prog[80],token[8],ch; 5 int syn,p,m,n,sum; 6 char *rwtab[6]={"begin","if","then","while","do","end"}; 7 8 void scaner(void); 9 10 m

词法分析程序的实现

我们知道人类制造了计算机,计算机需要为我们的生活提供帮助,但是我们需要它帮助我们做什么.怎么做还是需要我们来告诉它,告诉它的过程就是通过一串又一串的字符串也就是代码来告诉它.但是代码对于计算机来说它还是不理解的,它只是辨识0与1而已,所以我们要进一步的将我们编写的程序代码进一步分解变化为机器码.在这过程中,使用的编译器就是完成这一工作的,词法分析程序就是其必不可少的部分. 词法分析是将输入的字符串以单词符号的结果进行输出,以下是便是关于词法规则和各种单词符号对应的种别码的相关图片 在这个词法分析

实验一 词法分析程序实验

实验一.词法分析程序实验 商业软件工程   蓝海鹏  201506110171 一.        实验目的        编制一个词法分析程序. 二.        实验内容和要求 实验内容: 对字符串表示的源程序 从左到右进行扫描和分解 根据词法规则: 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)*(标识符) 10 >=

词法分析程序实验

一.词法分析程序的功能 输入一段字符串,从字符串表示的源程序中识别出具有独立意义的单词符号,根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号. 二.符号与种别码对照表 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14 ( 27 * 15 ) 28

实验一词法分析程序

一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c  cifafenxi.exe 2.      原理分析及流程图 3.      主要程序段及其解释: do { scanf("%s\n",input); i=0; while(input[i]

词法分析程序实验报告

实验一词法分析实验 商业软件工程2班  黄铭坤  201506110147 一.        实验目的        编制一个词法分析程序. 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:词法分析.c 可执行程序名:词法分析.exe 2.      原理分析及流程图 (1)   关键字: begin  if  then  while  do  end (2) 

词法分析程序新

词法分析程序的功能:提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上.符号与种别码对照表:单词符号 种别码 单词符号 种别码begin     1        :          17if           2        :=        18then      3        <          20while      4       <=        22do         5 end       6    

词法分析程序(编译原理)

一:词法分析程序的功能: 输入单词串,以'begin'开始,以'#'结束.如果是文法正确的句子,则输出成功的信息:'输入单词串成功',否则返回错误提示. 例: 输入 begin a:=345 end # 输出 输入单词串成功 二:符号与种码对照表 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 <  20 while 4 <= 21 do 5 <>  22 end 6 >  23 l(l|d)* 10 >= 24 dd*