0930 实验一 词法分析

一.实验目的: 编写一个词法分析程序

二.实验要求: ①输入源程序字符串 ②输出二元组(种别,单词符号本身)

三.各种单词符号对应的种别码(删减版)

四.程序代码

  1 #include<stdio.h>
  2 #include<string.h>
  3 void F(char c,char b);
  4 void word(char a[]);
  5 void number(char a[]);
  6 int i; //定义全局变量i
  7 int s=1; //用来记录是否存在非法字符
  8 main(){
  9        char a[50];
 10        printf("请输入需要分析的字符串:");
 11        gets(a);
 12        printf("您要分析的字符串为:");
 13        printf("%s",a);
 14        printf("\n");
 15        for(i=0;(a[i]!=‘\0‘)&&(i<50)&&s==1;i++){
 16        if((a[i]>=‘a‘ && a[i]<=‘z‘)||(a[i]>=‘A‘ && a[i]<=‘Z‘))
 17        word(a);
 18        else if(a[i]>=‘0‘ && a[i]<=‘9‘)
 19        number(a);
 20        else
 21        F(a[i],a[i+1]);
 22        }
 23        printf("\n");
 24 }
 25
 26 void number(char a[]) //对数字字符进行扫描分析
 27 {
 28        char b[50];
 29        int m,k=0,t;
 30        m=i;
 31        while(a[m]>=‘0‘ && a[m]<=‘9‘)
 32        {
 33        b[k]=a[m]; //用数组b存放数组a中的数字
 34        k++;
 35        m++;
 36        }
 37        i=m-1;
 38        printf("(11,");
 39        for(t=0;t<k;t++)
 40        printf("%c",b[t]);
 41        printf(")");
 42        printf("\n");
 43 }
 44
 45 void word(char a[]) //对字母字符进行扫描分析,并识别保留字
 46 {
 47 int k=0,m,flag=0,t;
 48 char b[50];
 49 char *key[6]={"begin","if","then","while","do","end"};
 50 m=i;
 51 while((a[m]>=‘a‘&&a[m]<=‘z‘)||(a[m]>=‘A‘&&a[m]<=‘Z‘)) //用数组b存放数组a中的字母
 52 {
 53     b[k]=a[m];
 54     k++;
 55     m++;
 56     b[k]=‘\0‘;
 57 }
 58     i=m-1;
 59     for(t=0;t<6;t++)
 60     {
 61     if(strcmp(b,key[t])==0) //将数组b与关键字进行比较
 62     {
 63     printf("(%d,%s)",t+1,key[t]); //输出关键字
 64     flag=1;
 65     printf("\n");
 66 }
 67 }
 68     if(flag==0)
 69 {
 70     printf("(10,%s)",b); //输出标识符
 71     printf("\n");
 72 }
 73 }
 74 void F(char c,char b) //对特殊字符进行扫描分析
 75 {
 76     switch(c){
 77       case ‘+‘:
 78              printf("(13,+)\n");
 79              break;
 80
 81       case ‘-‘:
 82              printf("(14,-)\n");
 83              break;
 84
 85       case ‘*‘:
 86              printf("(15,*)\n");
 87              break;
 88
 89       case ‘/‘:
 90              printf("(16,/)\n");
 91              break;
 92
 93       case ‘:‘:
 94              if(b==‘=‘)
 95              {
 96               i++;
 97               printf("(18,:=)\n");
 98              }
 99              else
100               printf("(17,:)\n");
101              break;
102
103        case ‘ ‘:
104              break;
105
106        case ‘<‘:
107              if(b==‘>‘)
108              {
109                i++;
110                printf("(21,<>)\n");
111              }
112              else if(b==‘=‘)
113              {
114               i++;
115               printf("(22,<=)\n");
116              }
117              else
118              printf("(20,<)\n");
119              break;
120
121       case ‘>‘:
122              if(b==‘=‘)
123              {
124              printf("(24,>=)\n");
125              i++;
126              }
127              else
128              printf("(23,>)\n");
129              break;
130
131       case ‘=‘:
132              printf("(25,=)\n");
133              break;
134
135       case ‘;‘:
136              printf("(26,;)\n");
137              break;
138
139       case ‘(‘:
140              printf("(27,()\n");
141              break;
142
143       case ‘)‘:
144              printf("(28,))\n");
145              break;
146
147       case ‘#‘:
148              printf("(0,#)\n");
149              break;
150
151
152 default:
153 {
154 printf("\n存在字符 ‘%c‘,无法继续识别!\n",c);
155 s=0; //用s=0记录存在非法字符
156 break;
157 }
158 }
159 }

五.程序结果

六.个人心得:

通过存储输入的字符串,用循环的方式逐个提取出来与种别码比较,然后进行输出。

本人觉得该实验难点在于如何让程序自动识别“ ”与“#”等特殊方式,以及循环的跳出条件

时间: 2024-12-29 21:34:32

0930 实验一 词法分析的相关文章

实验一&#160;&#160;词法分析程序045

实验一  词法分析程序实验 专业 计算机科学与技术   姓名 邹汉辉  学号 201508030045 一.实验目的 1. 编制一个词法分析程序 二. 实验内容和要求 1. 输入:源程序字符串 2. 输出:二元组(种别,单词本身) 3. 待分析语言的词法规则 三. 实验方法.步骤及结果测试 1.  源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:cifafenxi.exe 2.  原理分析及流程图 3.  主要程序段及其解释: #include<stdio

实验一词法分析报告

实验一.词法分析实验 专业:商业软件工程三班       姓名:郑锦诚      学号:201506110198 一.        实验目的 词法分析是编译的第一阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析. 二.        实验内容和要求 让用户输入一段程序段,然后逐个读取字符,将它们拼在一起,获取一个有意义的单词或符号,识别出单词或符号种别以及自身的值,并输出. 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文

哈工大软件学院编译原理实验1——词法分析

这次实验被"过来人"们定位非常easy,实验内容例如以下: ----------------------------------------------------------------------------------- 对例如以下工作进行展开描写叙述 (1) 给出语言的词法规则描写叙述 · 标识符.keyword.整常数.字符常数.浮点常数 · 单界符:+,-,×,;,- · 双界符:/*,:=,>=,<=,!=,- · 凝视 (2) 针对这样的单词的状态转换图和程

实验报告-词法分析.c

实验一.词法分析程序 商业软件工程   简梓茵  201506110132 一.        实验目的   熟悉词法分析的形式. 二.        实验内容和要求 对输入的每个关键字或者字符进行词法分析,给出该关键字对应的排序序号 三.        实验方法.步骤及结果测试   1.      源程序名:wordanalyse.c 2.      原理分析及流程图 3.      主要程序段及其解释: #include <stdio.h> #include <string.h>

实验一词法分析程序

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

实验一 词法分析实验报告

实验一.词法分析实验 专业:商业软件工程2班  姓名 别博文  学号201606110175 一. 实验目的        编制一个词法分析程序. 二. 实验内容和要求 对字符串表示的源程序,从左到右进行扫描和分解,根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用 发现词法错误,则返回出错信息.. 三. 实验方法.步骤及结果测试  源程序名:压缩包文件(rar或zip)中源程序名 ceshi.c 可执行程序名:ceshi.exe 主要程序段及其解释: 实现主要功能的程序段,重

实验一词法分析试验报告

实验一.词法分析实验 专业:商业软件工程   姓名:林海鑫  学号:201506110120 一.        实验目的 (1)掌握词法分析程序的实现方法. (2)用C语言对一个简单语言的子集编制一个一遍扫锚的编译理解,掌握编译程序的实现方法和技术. (3)理解词法分析在编译程序中的作用. (4)加深对有穷自动机模型的理解. 二.        实验内容和要求 1,词法分析程序的功能(输入,输出). 2,待分析的简单语言的词法. 3,各种单词符号对应的种别码. 三.        实验方法.步

实验1 词法分析

格式说明:排版时注意按此模板的字体,字号和行距. 报告提交和打印输出时请去掉此框. 实验一.词法分析实验 商软1班   周展鹏  201506110114 一.        实验目的        通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二.        实验内容和要求 在原程序中输入源代码 对字符串表示的源程序 从左到右进行扫描和分解 根据词法规则 识别出一个一个具有独立意义的单词符号 以供语法分析之用 发现词法错误,则返回出错信息 在

实验一 词法分析程序实验

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