zoukankan      html  css  js  c++  java
  • 词法分析程序

    一.词法分析程序的功能。

          词法分析程序完成的事编译第一阶段的工作。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描然后根据构词规则识别单词。词法分析工作可以使独立的一遍,把字符流的源程序变成单词序列,输出到一个中间文件,这个文件作为语法分析程序的恶输入而继续的编译过程。对字符串表示的源程序从左到右进行扫描和分解根据词法规则,识别出一个一个具有独立意义的单词符号以供语法分析之用,如果发现词法错误则返回出错信息。

    二.符号与种别码对照表:

     三.文法描述词法规则:

        这个概念真心不懂,只知道文法就是描述高级语言程序的构成规则。

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
    	int i;
    	char a[100];
        printf("请输入字符串:");
    	scanf("%s",&a);
    	for(i=0;i<100;i++)
    	{
    	  if(a[i]=='b'&&a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')
    		  printf("<1\tbegin>\n");
    	  else if(a[i]=='i'&&a[i+1]=='f')
    		  printf("<2\tif>\n");
    	  else if(a[i]=='t'&&a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')
    		  printf("<3\tthen>\n");
    	  else if(a[i]=='w'&&a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')
    		  printf("<4\twhile>\n");
    	  else if(a[i]=='d'&&a[i+1]=='o')
    		  printf("<5\tdo>\n");
    	  else if(a[i]=='e'&&a[i+1]=='n'&&a[i+2]=='d')
    		  printf("<6\tend>\n");
    	  else if(a[i]=='|'&&a[i+1]=='('&&a[i+2]=='l'&&a[i+3]=='|'&&a[i+3]=='d'&&a[i+3]=='*')
    	      printf("<3\tthen>\n");
    	  else if(a[i]=='d'&&a[i+1]=='d'&&a[i+2]=='*')
    		  printf("<11\tdd*>\n");
    	  else if(a[i]=='-')
    		  printf("<14\t->\n");
    	  else if(a[i]=='*')
    		  printf("<15\t*>\n");
    	  else if(a[i]=='/')
    		  printf("<16\t/>\n");
    	  else if(a[i]==':'&&a[i+1]!='=')
    		  printf("<17\t:>\n");
    	  else if(a[i]==':'&&a[i+1]=='=')
    		  printf("<18\t:=>\n");
    	  else if(a[i]=='<'&&a[i+1]!='='&&a[i+1]!='>')
    		  printf("<20\t<>\n");
    	  else if(a[i]=='<'&&a[i+1]=='=')
    		  printf("<21\t<=>\n");
    	  else if(a[i]=='<'&&a[i+1]=='>')
    		  printf("<22\t<>>\n");
    	  else if(a[i]=='>'&&a[i+1]!='=')
    		  printf("<23\t>>\n");
    	  else if(a[i]=='>'&&a[i+1]=='=')
    		  printf("<24\t>=>\n");
    	  else if(a[i]=='=')
    		  printf("<25\t=>\n");
    	  else if(a[i]==';')
    		  printf("<26\t;>\n");
    	  else if(a[i]=='(')
    		  printf("<27\t(>\n");
    	  else if(a[i]==')')
    		  printf("<28\t)>\n");
    	  else if(a[i]=='#')
    		  printf("<0\t#>\n");
    
    	}
    
    
    
    
    
    }
    

      

                     Vt ={a,b,c,d,e,0,1}

                    P={A->a|b|e|Aa|Ae|Ao|A}

                   S = A .

  • 相关阅读:
    LAMP搭建示例
    MySQL主从
    list多字段去重
    mysql按照某一个条件进行分组统计,同时又要保证一个相同字段的数据只统计一次
    sentinel自定义异常处理
    sentinel规则持久化
    zookeeper
    shiro
    iframe之间传递参数
    自定义标签
  • 原文地址:https://www.cnblogs.com/18128319239F/p/5925007.html
Copyright © 2011-2022 走看看