• 大小: 2.46MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-31
  • 语言: C/C++
  • 标签: NFA  DFA  词法分析  

资源简介

可以根据自定义的词法规则,生成相应的词法分析器。自动构造出该文法的NFA,DFA,并能够识别给定的字符串是否符合该文法规则的算法。并且该算法可以在控制台和MFC下运行。

资源截图

代码片段和文件信息

/*定义I/o库所用的某些宏和变量 */
#include “stdio.h“    
/* 定义 字符串库函数*/
#include “string.h“   

/*#define NULL 0;*/

/* prog数组:存放输入的字符串;token数组:用来存放构成单词符号的字符串*/
char prog[80]token[8]; 

/* ch:存取当前即将分析的字符*/
char ch;
 
 /* syn:用来存放单词符号的种别码; p:缓冲区prog的指针;m:token的指针*/
int synpmnsumpriNo=1num=3;
int kk;
/* rwtab数组存放关键字(均为小写),其特别码为:下标加1 */
char *rwtab[6]={“begin““if““then““while““do““end“};

void scaner();
void lrparser();
void YuJuString();
void statement();
void expression();
void term();
void factor();


main()
{
int i=0;
gotoxy(221);
printf(“此程序为某语法的分析程序!\n\n“);
gotoxy(22);
printf(“你可以验证3个句子!“);
gotoxy(33);
printf(“***************************************************************“);
 do{
 p=0;kk=0;    /*初始化*/
 printf(“\n Please input string(end‘#‘):  “); /*输入字符串以‘#’结尾*/
 /*do{
 scanf(“%c“&ch);
 prog[p++]=ch;
 }while(ch!=‘#‘);*/
 gets(prog);
 p=0;
 scaner();
 printf(“\n--------“);
 lrparser();
 i++;
 printf(“\n*************************************************************\n“);
   }while(i}



void scaner()
{
 m=0;
 for(n=0;n<8;n++) token[n]=NULL;   /*初始化token数组*/
 sum=0;                            /*初始化sum为0*/
 ch=prog[p++];
 while(ch==‘ ‘)  ch=prog[p++];     /*忽略空格*/
 if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘) /*字符*/
 {
  while(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘)
  {
   token[m++]=ch;
   ch=prog[p++];
  }
  token[m++]=‘\0‘;
  
  p--;
  syn=10;
  for(n=0;n<6;n++)
   if(strcmp(tokenrwtab[n])==0)
   {
     syn=n+1;
     break;
   }
 }
 
 else
 
     if(ch>=‘0‘&&ch<=‘9‘)
     {
      while(ch>=‘0‘&&ch<=‘9‘)
      {
        sum=sum*10+ch-‘0‘;
        ch=prog[p++];
      }
       p--;
       syn=11; 
     }

  else
   {
   switch(ch)
   {
     case ‘<‘: m=0;token[m++]=ch;
                ch=prog[p++];
               if(ch==‘>‘)
               {
                syn=21;
                token[m++]=ch;
            
               }
               else if(ch==‘=‘)
               {
                syn=22;
                token[m++]=ch;
               
               }
              else
              {
                syn=20;
                
                p--;
              }
              token[m]=‘\0‘;
             break;
     case ‘>‘:   m=0;token[m++]=ch;
                 ch=prog[p++];
                 if(ch==‘=‘)
               {
                syn=24;
                token[m++]=ch;
               }
               
              else
              {
                syn=23;
                p--;
              }
              token[m]=‘\0‘;
             break; 
               
    case ‘:‘:   m=0;token[m++]=ch;
                ch=prog[p++];
                 if(ch==‘=‘)
               {
                syn=18;
                token[m++]=ch;
               }
               
              else
              {
                syn=17;
                p--;
              }
              token

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4892  2008-06-02 15:41  词法分析器报告\实验2.c

     文件      70656  2008-06-03 21:02  词法分析器报告\实验2.doc

     文件    2076160  2008-06-02 22:59  词法分析器报告\词法分析器报告.doc

     文件       2389  2008-05-28 17:40  词法分析器报告\Win32Complier 5-25\AccidenceMachine.cpp

     文件       1170  2008-05-28 17:40  词法分析器报告\Win32Complier 5-25\AccidenceMachine.h

     文件        619  2008-05-28 17:46  词法分析器报告\Win32Complier 5-25\Config.h

     文件         28  2008-05-22 23:08  词法分析器报告\Win32Complier 5-25\DequeNode.cpp

     文件        670  2008-05-24 00:38  词法分析器报告\Win32Complier 5-25\DequeNode.h

     文件       2786  2008-05-28 17:40  词法分析器报告\Win32Complier 5-25\Grammar.cpp

     文件       2672  2008-05-27 22:58  词法分析器报告\Win32Complier 5-25\Grammar.h

     文件       4537  2008-05-26 22:59  词法分析器报告\Win32Complier 5-25\GrammarStruct.h

     文件      17738  2008-05-28 17:50  词法分析器报告\Win32Complier 5-25\GrammarToNFA.cpp

     文件       1273  2008-05-31 13:33  词法分析器报告\Win32Complier 5-25\GrammarToNFA.h

     文件       2351  2008-06-02 17:52  词法分析器报告\Win32Complier 5-25\Main.cpp

     文件        580  2008-05-25 18:03  词法分析器报告\Win32Complier 5-25\NFAChartStruct.h

     文件      15001  2008-05-28 17:31  词法分析器报告\Win32Complier 5-25\NFAToDFA.cpp

     文件       2326  2008-05-28 17:30  词法分析器报告\Win32Complier 5-25\NFAToDFA.h

     文件       4712  2008-05-25 17:15  词法分析器报告\Win32Complier 5-25\Win32Complier.dsp

     文件        551  2008-05-07 12:37  词法分析器报告\Win32Complier 5-25\Win32Complier.dsw

     文件     123904  2007-08-25 12:43  词法分析器报告\Win32Complier 5-25\Win32Complier.ncb

     文件      54784  2007-08-25 12:43  词法分析器报告\Win32Complier 5-25\Win32Complier.opt

     文件        260  2007-08-25 11:16  词法分析器报告\Win32Complier 5-25\Win32Complier.plg

     文件      30565  2008-05-28 17:46  词法分析器报告\Win32Complier 5-25\Debug\AccidenceMachine.obj

     文件       5982  2008-05-28 17:46  词法分析器报告\Win32Complier 5-25\Debug\DequeNode.obj

     文件      33390  2008-05-28 17:46  词法分析器报告\Win32Complier 5-25\Debug\Grammar.obj

     文件      65341  2008-05-31 13:33  词法分析器报告\Win32Complier 5-25\Debug\GrammarToNFA.obj

     文件      30752  2008-06-02 17:52  词法分析器报告\Win32Complier 5-25\Debug\Main.obj

     文件     121710  2008-05-28 17:46  词法分析器报告\Win32Complier 5-25\Debug\NFAToDFA.obj

     文件     222208  2007-08-25 11:16  词法分析器报告\Win32Complier 5-25\Debug\vc60.idb

     文件     167936  2008-06-02 17:52  词法分析器报告\Win32Complier 5-25\Debug\vc60.pdb

............此处省略10个文件信息

评论

共有 条评论