词法分析器、语法分析器、语义分析器 的区别以及别人编写的程序。

来源:互联网 发布:pvg网络视频管理平台 编辑:程序博客网 时间:2024/05/21 07:07

顾名思义,词法分析器检查的是词法,语法分析器分析的是语法,什么是词法,什么是语法你弄明白就知道了。所谓词法,源代码由字符流组成,字符流中包括关键字,变量名,方法名,括号等等符号,其中变量名要满足不能包括标点符号,不能以数字开头的数字与字母的字符串这个条件,对于括号要成对出现等等,这就是词法;而语法,词法没有问题才能进入语法分析,语法就是词排列的方法,字面意义,比如一句中文:我吃萝卜,里面有三个词我 吃 萝卜,除了“我吃萝卜”外,这三个词还可以组成,“萝卜吃我”“萝卜我吃”等,显然按照中文文法,后面的两句话是不对的,语法分析器就是分析类似这样的语法的。




高分求用C语言编写的词法分析、语法分析及语义分析器,要求是有界面的那种,可发到我邮箱84369651@qq.com

举报|2010-12-09 20:52传说中的小U | 分类:C/C++ | 浏览1634次
请知道的高手帮帮忙~
2010-12-09 21:09提问者采纳
以前写的 看对你有帮助没#include"stdio.h"#include"conio.h"#include"string.h"#include"stdlib.h"#define num 10#define num0 9#define num1 9char *KeyWords[num]={"int","float","char","while","if","else","switch","case","break","return" };//关键字 char ope[num0]={'+','-','*','/','|','&','=','>','<'};//操作符 char edgesign[num1]={';',',','(',')','"','{','}'};//分隔符 不含 换行,空格 int Key(char *word){ for(int i=0;i< num;i++)      if(!strcmp(KeyWords[i],word))       return 1;    return 0;}//确定是否为关键字 int yun(char word){ for(int i=0;i<num0;i++)     if(ope[i]==word)         return 1;    return 0;}//确定是否为运算符 int Sign(char word){   for(int i=0;i<num1;i++)     if(edgesign[i]==word)      return 1;    return 0;}//确定 是否为分隔符符 void out2(char word)    //4为运算符,5为分隔符  {       if(yun(word))        {        printf("(4,\"%c\")\n",word);             }           if(Sign(word))           {  printf("(5,\"%c\")\n",word);            }                     }void out1(char *word,int Len) //3为字符或者数字,2为标识符,1为关键字  {     int a;       if(Key(word))       printf("(1,\"%s\")\n",word);       else {                if( word[0]=='\'' && word[Len-1]=='\'')             //字符常量                printf("(3,\"%s\")\n",word);               else     if((a=atoi(word)))//字符串转化为数字              printf("(3,\"%d\")\n",a);              else  {                   if(word[0]!='\0') printf("(2,\"%s\")\n",word);                 }         }           }int Scan(){   FILE *fp;   char temp[10],ch='1',temp1;   char filename[20];   int i,j;     printf("请输入文件名");     scanf("%s",filename);     if((fp=fopen(filename,"r"))==NULL)          {          printf("文件打开失败");            return 0      ; }                        while(ch!=EOF){                           j=0;                             i=0;                           ch=fgetc(fp);               while(!Sign(ch)&&!yun(ch)&&ch!=' '&&ch!='\n'&&ch!=EOF)                {                 temp[i]=ch;                                  temp[i+1]='\0';                                  ch=fgetc(fp);                                             i++;                    }                      out1(temp,i);                    temp[0]='\0';//清除字串                       temp1=ch;                                    out2(temp1);                   temp1='\0';//清除字符                     }               fclose(fp);return 1;}int main(){  Scan();  getchar();  getchar();  }
0 0
原创粉丝点击