主题:计算机菜鸟求助:课程设计题目 词法分析器  本人愿意以 30Q 币答谢
			 小飞VVVV
				 [专家分:0]  发布于 2005-06-27 09:03:00
 小飞VVVV
				 [专家分:0]  发布于 2005-06-27 09:03:00							
			设计目的  
  
加深对语法分析程序的任务及其工作原理的理解;掌握语法分析程序的实现方法;掌握简单语言的状态转换图表示形式极其识别程序的构造。
设计任务
 编写对简单语言进行语法分析的词法分析程序。并对输入串for I=1to 20 do {x:=x+2;y:=y*(2+c);}} 进行语法分析,要求如下: 1。识别其中的关键字,标识符,常数,运算符和界符。2,对其中的数字注明其值和类型 3。将识别的结果填入表中并输出。
 
谢谢各位大虾  帮忙编写这个程序   本人愿意以30个Q币做为答谢  
 联系方式 lovemyt618@yahoo.com.cn QQ :375761551   小明
						
					 
		
			
回复列表 (共2个回复)
		
								
				沙发
				
					 lx6636 [专家分:10]  发布于 2005-06-28 21:54:00
lx6636 [专家分:10]  发布于 2005-06-28 21:54:00				
				真的?我做 了这个题目
							 
						
				板凳
				
					 qianlima210210 [专家分:1110]  发布于 2005-06-30 08:53:00
qianlima210210 [专家分:1110]  发布于 2005-06-30 08:53:00				
				#include "stdio.h"
#include "ctype.h"
#include "math.h"
#include  "iostream.h"
#include"string.h"
#define LETTER  0
#define DIGIT   1
#define POINT   2
#define OTHER    3
#define POWER   4
#define PLUS    5
#define MINUS    6
#define ClassNo   100
#define ClassOther   200
#define EndState   -1
char num[100];
int w,n,p,e,d;
int Class,i=0;
int ICON;
float FCON;
static int CurrentState;
int GetChar(void);
int EXCUTE(int,int);
int LEX(void);
int HandleOtherWord(void)
{
    return ClassOther;
}
int HandleError(void)
{
    printf("ERROR!\n");
    return 0;
}
int GetChar(void)
{
    int c;
    c=num[i++];
 
    if(isdigit(c))
    {
        d=c-'0';return DIGIT;
    }
    if(c=='.')return POINT;
    if(c=='E'||c=='e')return POWER;
    if(c=='+') return PLUS;
    if(c=='-')return MINUS;
    return OTHER;
}
//============================================
int EXCUTE(int state,int symbol)
{
    switch (state)
    {
    case 0:switch(symbol)
           {
            case DIGIT:n=0;p=0;e=1;w=d;CurrentState=1;Class=ClassNo;break;
            case POINT:w=0;n=0;p=0;e=1;CurrentState=3;Class=ClassNo;break;
            default:HandleOtherWord();Class=ClassOther;
                CurrentState=EndState;
           }
        break;
    case 1:switch(symbol)
           {
        case DIGIT:w=w*10+d;break;
        case POINT:CurrentState=2;break;
        case POWER:CurrentState=4;break;
        default:FCON=w;CurrentState=EndState;
           }
        break;
    case 2:switch(symbol)
           {
            case DIGIT:n++;w=w*10+d;break;
            case POWER:CurrentState=4;break;
            default:FCON=w*pow(10,e*p-n);CurrentState=EndState;
           }
        break;
    case 3:switch(symbol)
           {
            case DIGIT:n++;w=w*10+d;CurrentState=2;break;
            default:HandleError();CurrentState=EndState;
           }
        break;
    case 4:switch(symbol)
           {
            case DIGIT:p=p*10+d;CurrentState=6;break;
            case MINUS:e=-1;CurrentState=5;break;
            case PLUS:CurrentState=5;break;
            default:HandleError();CurrentState=EndState;
           }
        break;
    case 5:switch(symbol)
           {
               case DIGIT:p=p*10+d;CurrentState=6;break;
               default:HandleError();CurrentState=EndState;
           }
        break;
    case 6:switch(symbol)
           {
            case DIGIT:p=p*10+d;break;
            default:FCON=w*pow(10,e*p-n);CurrentState=EndState;
           }
        break;
    }
return CurrentState;
}
int LEX(void)
{
    int ch;
    CurrentState=0;
        while(CurrentState!=EndState)        
        {
            ch=GetChar();
            EXCUTE(CurrentState,ch);
        }
        return Class;
}
void main()
{ printf("please input\n");
scanf("%s",num);
 
LEX();
// cout<<ICON<<endl;
 cout<<FCON<<endl;
}
//参考一下
							 
									
			
我来回复