0917 实验一词法分析程序

#include <stdio.h>
#include <string.h>
int Input1(char a)
{
 int i=0;
 switch(a)
 {
 case(‘+‘):
  printf("%c\t   13\n",a);i++;break;
 case(‘-‘):
  printf("%c\t   14\n",a);i++;break;
 case(‘*‘):
  printf("%c\t   15\n",a);i++;break;
 case(‘/‘):
  printf("%c\t   16\n",a);i++;break; 
 case(‘:‘):
  printf("%c\t   17\n",a);i++;break; 
 case(‘<‘):
  printf("%c\t   20\n",a);i++;break; 
 case(‘>‘):
  printf("%c\t   23\n",a);i++;break; 
 case(‘=‘):
  printf("%c\t   25\n",a);i++;break; 
 case(‘;‘):
  printf("%c\t   26\n",a);i++;break; 
 case(‘(‘):
  printf("%c\t   27\n",a);i++;break;
 case(‘)‘):
  printf("%c\t   28\n",a);i++;break; 
 case(‘#‘):
  printf("%c\t   0\n",a);i++;break;
 }
 return i;
}
int Input2(char a[])
{
 int i=0;
 if((strcmp(a,"if")==0))
 {printf("if\t   2\n"); i++;}
 else if((strcmp(a,"do")==0))
 {printf("do\t   5\n"); i++;} 
 else if((strcmp(a,":=")==0))
 {printf(":=\t   18\n"); i++;}
 else if((strcmp(a,"<=")==0))
 {printf("<=\t   21\n"); i++;} 
 else if((strcmp(a,"<>")==0))
 {printf("<>\t   22\n"); i++;} 
 else if((strcmp(a,">=")==0))
 {printf(">=\t   24\n"); i++;}
 return i;
}
int Input3(char a[])
{
 int i=0;
 if((strcmp(a,"end")==0))
 {printf("end\t   6\n"); i++;}
 else if((strcmp(a,"dd*")==0))
 {printf("dd*\t   11\n"); i++;}
 return i;
}
int Input4(char a[])
{
 int i=0;
 if((strcmp(a,"then")==0))
 {printf("then\t   3\n"); i++;}
 return i;
}
int Input5(char a[])
{
 int i=0;
 if((strcmp(a,"begin")==0))
 {printf("begin\t   3\n"); i++;}
 else if((strcmp(a,"begin")==0))
 {printf("begin\t   1\n"); i++;}
 else if((strcmp(a,"while")==0))
 {printf("while\t   4\n"); i++;}
 return i;
}
/*int Input8(char a[])
{
 int i=0;
 if((strcmp(a,"|(||d)*")==0))
 {printf("begin\t   3\n"); i++;}
 return i;
}*/

#define MAX 100

struct Code
{
 char chars[MAX];
};

int main()
{
 char SC[MAX];
 Code code[MAX];
 int i,j,k,n;
 printf("请输入代码:  ");
 gets(SC);
 printf("单词符号  种别码\n");
 i=j=k=0;
 n=1;
 while(SC[i]!=‘\0‘)
 {
  code[k].chars[j]=SC[i];
  code[k].chars[j+1]=‘\0‘;

switch(n)
  {
  case(1): if(Input1(code[k].chars[j])==1)   
     {k++;j=-1;}break;
  case(2): if(Input2(code[k].chars)==1)      
     {k++;j=-1;}break;
  case(3): if(Input3(code[k].chars)==1)      
     {k++;j=-1;}break;
  case(4): if(Input4(code[k].chars)==1)      
     {k++;j=-1;}break;
  case(5): if(Input5(code[k].chars)==1)      
     {k++;j=-1;}break;
  /*case(8): if(Input8(code[k].chars)==1)      
     {k++;j=-1;}break; */
  default:
   printf("%s\t语法错误!\n",code[k].chars);k++;j=-1;break;
  }
  if(j==-1)
   n=0;
  j++;
  i++;
  n++;
 }
 return 0;
}

时间: 2024-10-13 17:27:14

0917 实验一词法分析程序的相关文章

0917 实验一 词法分析程序

#include <stdio.h> #include <string.h> #include <iostream.h> #define BEGIN 1 #define IF 2 #define THEN 3 #define WHILE 4 #define DO 5 #define END 6 #define INT 11 #define LT 20 #define LE 21 #define EQ 24 #define NE 22 #define GT 12 #def

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

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

实验一词法分析程序

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

实验一 词法分析程序实验

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

0917 实验一 词法分析 已修改

#include <stdio.h> #include <string.h> #include <iostream.h> #define BEGIN 1 #define IF 2 #define THEN #define WHILE 4 #define DO 5 #define END 6 #define INT 11 #define LT 20 #define LE 21 #define EQ 24 #define NE 22 #define GT 12 #defin

0916 编程实验一 词法分析程序

#include<stdio.h> #include<stdlib.h> #include<string.h> #define _KEY_WOED_END "waiting for your expanding" typedef struct { int typenum; char * word; }WORD; char input[255]; char token[255] = ""; int p_input; int p_to

编程实验一 词法分析程序

#include<stdio.h> #include<stdlib.h> #include<string.h> #define _KEY_WOED_END "waiting for your expanding" //关键字结束标志 typedef struct { int typenum; char * word; }WORD; char input[255]; //输入换缓冲区 char token[255]=""; //单词

(改)编程实验一 词法分析程序

  #include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct node{ char words[255]; struct node *next;}NODE; char word[255];char *word_default[6]={"begin","if","then","while","do&

词法分析程序实验报告

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