zoukankan      html  css  js  c++  java
  • 0916 编程实验一 词法分析程序

    # include<stdio.h>
    # include<stdlib.h>
    # include<string.h>
    
    int panduan(char tmp[])
    {
    	char b[6][10] = {"begin", "if", "then", "while", "do", "end", };
    	int k = 0;
    
    	while(k < 6)					// 临时变量tmp 与 字符串b[k] 进行比较
    	{
    		if(strcmp(tmp, b[k]) == 0)
    		{
    			printf("<%s, %d>
    ", tmp, k+1);
    			return 0;
    		}
    		k++;
    	}
    	printf("<%s, 10>
    ", tmp);
    
    	return 0;
    }
    
    void cifafenxi(char a[])
    {
    	int i = 0, j = 0;
    	char tmp[10];
    	int flag = 0;
    
    	while(a[i] != '')
    	{
    		if(a[i] >= 'a' && a[i] <= 'z')		// 判断标识符
    		{
    			tmp[j] = a[i];
    			j++;
    			while((a[i+1] >= 'a' && a[i+1] <= 'z') || (a[i+1] >= '0' && a[i+1] <= '9'))
    			{
    				i++;
    				tmp[j] = a[i];
    				j++;
    			}
    			tmp[j] = '';
    			j = panduan(tmp);
    		}
    
    		if(a[i] >= '0' && a[i] <= '9')		// 判断数字
    		{
    			tmp[j] = a[i];				
    			j++;
    			while(a[i+1] >= '0' && a[i+1] <= '9')
    			{
    				i++;
    				tmp[j] = a[i];
    				j++;
    			}
    			tmp[j] = '';
    			printf("<%s, 11>
    ", tmp);
    			j = 0;
    		}
    
    		switch(a[i])		// 判断符号
    		{
    		case '+':printf("<+, 13>
    ");break;
    		case '-':printf("<-, 14>
    ");break;
    		case '*':printf("<*, 15>
    ");break;
    		case '/':printf("</, 16>
    ");break;
    		case ':':
    			{
    				if(a[i+1] == '=')
    					printf("<:=, 18>
    ");
    				else
    					printf("<:, 17>
    ");
    			}break;
    		case '<':
    			{
    				if(a[i+1] == '=')
    					printf("<<=, 21>
    ");
    				else if(a[i+1] == '>')
    					printf("<<>, 22>
    ");
    				else
    					printf("<<, 20>
    ");
    			}break;
    		case '>':
    			{
    				if(a[i+1] == '=')
    					printf("<>=, 24>
    ");
    				else
    					printf("<>, 23>
    ");
    			}break;
    		case '=':printf("<=, 25>
    ");break;
    		case ';':printf("<;, 26>
    ");break;
    		case '(':printf("<(, 27>
    ");break;
    		case ')':printf("<), 28>
    ");break;
    		case '#':printf("<#, 0>
    ");break;
    		}
    	
    		i++;
    	}
    }
    
    int main(void)
    {
    	char a[300];
    
    	printf("input : ");
    	gets(a);
    	cifafenxi(a);
    
    	return 0;
    }
    


  • 相关阅读:
    java面试笔记
    ASP.NET MVC 第三章 异步提交数据
    ASP.NET MVC 第二章 路由和修改路由
    ASP.NET MVC 第一章 我们的第一个MVC例子
    本团队承接软件开发项目
    论面向服务的架构及其应用
    软件架构设计阅读笔记3
    学习15
    软件架构设计阅读笔记2
    学习13
  • 原文地址:https://www.cnblogs.com/qiuhuimin/p/4901420.html
Copyright © 2011-2022 走看看