亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scanner.cpp

?? 自己做的小編譯程序,大家看看好不好用哦,是詞法分析器
?? CPP
字號:
#ifndef SCANNER_CPP_INCLUDED
#define SCANNER_CPP_INCLUDED

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std; 


#include "scanner.h"
#include "mylist.h"

FILE*   f;

bool    EOF_Flag;

char    buffer[256];
char    ch; 

int     flag;
int     nCount;
int     bufferIndex;
int     line = 1;

string  currentstring; 

CToken  currenttoken;

StateType state =s0;

CMyList<CToken> TokenList ;
CMyList<string> identiferList;
CMyList<string> unsignedIntList;

string LexName[42] = 
{
	"ENDFILE","ERROR",
	
	"PROGRAM","PROCEDURE","TYPE","VAR",
	"IF","THEN","ELSE","FI","WHILE","DO",
	"ENDWH","BEGIN","END","READ","WRITE",
	"ARRAY","OF","RECORD","RETURN",
	
    "INTEGER","CHAR",

	"ID", "INTC", "CHARC",
	
    "ASSIGN","EQ","LT","PLUS","MINUS","TIMES",
	"OVER","LPAREN","RPAREN","DOT","COLON",
	"SEMI","COMMA","LMIDPAREN","RMIDPAREN",
	"UNDERANGE"
};

int getNextChar(FILE *f, char buffer[ ])      
{
	if (EOF_Flag) return -1;
	if(nCount == 0 || bufferIndex == nCount)
	{
		bufferIndex = 0;
		if(fgets(buffer,256,f) == NULL)
		{
			EOF_Flag = true;
			return -1;
		}
		nCount = strlen(buffer);
	}
	return buffer[bufferIndex++];
}


void ungetNextChar(char buffer[])
{
	bufferIndex--;
}


int reservedLookup(string & rs)
{
	int n = 0;
	while(n < MaxReserved)
	{
		string t = ReservedWord[n].str;
		if(t == rs)
		{
			return n;
		}
		else n++;
	}
	return -1;
}

CToken getToken(FILE *f,char buffer[])
{
	ch = getNextChar(f,buffer);
	if(ch == -1) 
	{
		currenttoken.lineShow = line;
		currenttoken.lex      = ENDFILE;
		currenttoken.sem      = "";
	}
	else 
    {		
		state = s0;
		currentstring = "";
		while (state != send)
		{
		      if (ch == -1)
			  {
				  currenttoken.lineShow = line;
				  currenttoken.lex      = ENDFILE;
				  currenttoken.sem      = "";
				  state = send;
				  break;
			  }
			  switch (state)
			  {
			  case s0:
				  if ((isalpha(ch)) && flag == 0)
				  {
					  state = s1;
					  break;
				  }
				  else  if ((isdigit(ch)) && flag == 0)
				  { 
					  state = s3;
					  break;
				  }
				  else  if (flag == 0)
				  {           
					  switch (ch)
					  { 			
					  case '+':
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = PLUS;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case '=':					          
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = EQ;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case '<':
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = LT;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case '-': 
					      currenttoken.lineShow  = line;
						  currenttoken.lex       = MINUS;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case '*': 
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = TIMES;
						  currenttoken.sem       = "";
						  state=send;
						  break;
	   				  case '/':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = OVER;
						  currenttoken.sem       = "";
						  state=send;
						  break;
				   	  case '(':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = LPAREN;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case ')':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = RPAREN;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case ';':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = SEMI;
				          currenttoken.sem       = "";
						  state=send;
						  break;
	       			  case '[':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = LMIDPAREN;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case ']':  
						  currenttoken.lineShow  = line;
						  currenttoken.lex       = RMIDPAREN;
						  currenttoken.sem       = "";
						  state=send;
						  break;
				      case ',':  
						  currenttoken.lineShow  = line;
				          currenttoken.lex       = COMMA;
						  currenttoken.sem       = "";
						  state=send;
						  break;
					  case '\t': 
					  case ' ' : 
						  ch= getNextChar(f,buffer);
				    	  state=s0;
				 		  break;
					  case '.' : 
						  state = s4;
						  break;
					  case ':' :  
						  state = s5;
						  break;
					  case '{' : 
						  state = s6;
						  break;
					  case '\n': 
						 line++;
				   		 ch = getNextChar(f,buffer);
				 		 state = s0;
				 		 break;
				   }
				 }
                 break;
	  
	  case s1:
		  while ((isalpha(ch))||(isdigit(ch))||(ch == '_'))
			   {
				  currentstring += ch;
				  ch = getNextChar(f,buffer);
			   }
		  ungetNextChar(buffer);
    	  state = s2;
	      break;
	   case s2:  
		   int res;
		   if((res = reservedLookup(currentstring)) != -1)
				{
                    currenttoken.lineShow  = line;
					currenttoken.lex       = ReservedWord[res].tok;
					currenttoken.sem       = "";
					state = send;
				}
	   	   else
			  {
				  if(identiferList.GetFirstNode(currentstring) != NULL)
				  {
					  currenttoken.sem = identiferList.GetFirstNode(currentstring)->data;
				  }
                  else 
				  {
					  identiferList.InsertAtTail(currentstring);
					  currenttoken.sem = currentstring;
				  }

					  currenttoken.lineShow  = line;
					  currenttoken.lex       = ID;
       				  state = send;
			  }
			break;
	  case s3:
		        while (isdigit(ch))
				{
					 currentstring += ch;
				     ch = getNextChar(f,buffer);
				}
             		 ungetNextChar(buffer);
                 if(unsignedIntList.GetFirstNode(currentstring) != NULL)
				 {
					  currenttoken.sem = unsignedIntList.GetFirstNode(currentstring)->data;
				 }
				 else 
				 {
					 unsignedIntList.InsertAtTail(currentstring);
					 currenttoken.sem = currentstring;
				 }
				 
				 currenttoken.lineShow  = line;
				 currenttoken.lex       = INTEGER;
		         state = send;
				 break;
      case s4:
		  {
			  ch = getNextChar(f,buffer);
                if(ch == '.')
				{
					currenttoken.lineShow  = line;
					currenttoken.lex       = UNDERANGE;
					currenttoken.sem       = "";

				}
				else 
				{
					ungetNextChar(buffer);
					currenttoken.lineShow  = line;
					currenttoken.lex       = DOT;
					currenttoken.sem       = "";
				    //ungetNextChar(buffer);
				}
			state = send;
			break;
		  }
	  case s5:
		  {
			    ch=getNextChar(f,buffer);
                if(ch == '=')
				{
					currenttoken.lineShow  = line;
					currenttoken.lex       = ASSIGN;
					currenttoken.sem       = "";

				}
				else 
				{
					ungetNextChar(buffer);
					currenttoken.lineShow  = line;
					currenttoken.lex       = COLON;
					currenttoken.sem       = "";
				    ungetNextChar(buffer);
				}
			state = send;
			break;
		  }

	  case s6: 
		  {
			  flag++;
			  while (flag != 0 && ch != -1)
			  {
				  ch = getNextChar(f,buffer);
				  if(ch == '}')
					  flag--;
				  else if(ch == '{')
					  flag++;
			  }
			  ch = getNextChar(f,buffer);
			  state = s0;
			  break;
		  }
		  }
    
	}
	}  
   return currenttoken;
}


CMyList<CToken>  getTokenList(FILE *f,char buffer[])
{
	CToken token1 = getToken(f,buffer);
	CMyList<CToken> TempTokenList;
    
	while(token1.lex != ENDFILE)
	{
		 TempTokenList.InsertAtTail(token1);
		 token1 = getToken(f,buffer);
	}

	  
    if (token1.lex == ENDFILE)
	   TempTokenList.InsertAtTail(token1);

	return TempTokenList;
		
}



CToken GetOneToken(FILE* f,char buffer[],int k)
{
	CMyList<CToken> tempList = getTokenList(f,buffer);
	CToken tempToken;
	Node<CToken>* tempPtr = tempList.GetNode(k);
	tempToken.lex         = (tempPtr->data).lex;
	tempToken.lineShow    = (tempPtr->data).lineShow  ;
	tempToken.sem         = (tempPtr->data).sem;
	return tempToken;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美aaaaaa午夜精品| 狠狠色狠狠色合久久伊人| 久久精品人人做人人综合| 7777精品伊人久久久大香线蕉 | 亚洲精品在线三区| 日韩一级大片在线观看| 欧美一区二区三区视频免费播放 | 日韩精品一区第一页| 性久久久久久久久久久久| 日韩av中文字幕一区二区三区| 香蕉加勒比综合久久| 午夜视频一区二区| 日韩精品乱码免费| 免费高清不卡av| 成人做爰69片免费看网站| 99这里都是精品| 欧美在线短视频| 日韩女优电影在线观看| 欧美激情一区二区在线| 亚洲欧美日本在线| 日韩av在线发布| 高清成人在线观看| 在线看日本不卡| 欧美不卡一区二区| 中文字幕在线不卡一区二区三区| 亚洲欧美国产高清| 视频精品一区二区| 国产suv精品一区二区三区| 91在线视频18| 日韩精品资源二区在线| 亚洲天堂免费看| 麻豆91在线看| 一本久道久久综合中文字幕| 欧美一级理论性理论a| 国产日韩精品一区| 亚洲成国产人片在线观看| 麻豆传媒一区二区三区| 91网站最新地址| 亚洲精品一区二区三区在线观看| 亚洲美女免费视频| 国产麻豆精品95视频| 欧美性猛交xxxx乱大交退制版| 26uuu另类欧美| 亚洲图片欧美视频| 成人免费看黄yyy456| 欧美一卡2卡三卡4卡5免费| 国产精品午夜久久| 久久99国内精品| 欧美视频在线观看一区二区| 国产亚洲1区2区3区| 日韩av中文在线观看| 色老汉av一区二区三区| 欧美国产一区二区| 久久超碰97人人做人人爱| 欧美中文字幕一二三区视频| 国产女同互慰高潮91漫画| 久久成人av少妇免费| 欧美日韩激情一区二区| 悠悠色在线精品| gogo大胆日本视频一区| 欧美国产激情一区二区三区蜜月| 久久国产乱子精品免费女| 欧美日韩在线免费视频| 亚洲激情男女视频| 91在线porny国产在线看| 国产精品久久福利| 成人免费观看男女羞羞视频| 久久精品男人天堂av| 久久精品国产澳门| 精品少妇一区二区三区免费观看| 奇米综合一区二区三区精品视频| 欧美日韩综合色| 午夜影院久久久| 884aa四虎影成人精品一区| 五月婷婷另类国产| 欧美精品一卡两卡| 日本视频在线一区| 日韩欧美你懂的| 激情综合网天天干| 国产调教视频一区| 91在线看国产| 亚洲午夜一二三区视频| 在线播放欧美女士性生活| 日韩电影免费在线| 精品国产乱码久久久久久浪潮| 精品一区二区三区蜜桃| 久久久久97国产精华液好用吗| 国产精品综合二区| 久久精品亚洲国产奇米99| 成人动漫视频在线| 亚洲一区二区三区影院| 51午夜精品国产| 国产一区二区三区久久久| 日本一区二区三区电影| 91美女在线看| 日韩国产精品大片| 久久精品免费在线观看| 色综合 综合色| 青草av.久久免费一区| 久久综合久久综合久久综合| 成人的网站免费观看| 亚洲国产日产av| 欧美www视频| 99久久精品国产一区二区三区| 亚洲一区二区欧美激情| 日韩视频一区二区三区| 成人性生交大片免费看视频在线| 一区二区三区**美女毛片| 欧美α欧美αv大片| 99国产精品久久久| 麻豆国产欧美日韩综合精品二区 | 亚洲高清久久久| 精品日韩一区二区三区| 一本到不卡精品视频在线观看| 蜜桃视频第一区免费观看| 国产精品黄色在线观看| 在线播放中文字幕一区| 成人av资源在线| 蜜桃一区二区三区在线观看| 1024成人网| 久久久久国产免费免费| 欧美美女bb生活片| 波多野结衣中文字幕一区二区三区| 亚洲国产sm捆绑调教视频| 国产精品美女久久久久久久| 欧美一区二区性放荡片| 色综合中文字幕国产| 国产精品原创巨作av| 亚洲一级二级在线| 国产精品免费久久久久| 欧美第一区第二区| 欧美视频在线观看一区| 99re热这里只有精品免费视频| 久久精品久久久精品美女| 亚洲午夜视频在线| 亚洲乱码中文字幕| 综合久久国产九一剧情麻豆| 国产午夜精品美女毛片视频| 日韩免费在线观看| 欧美一区二区三区性视频| 欧美图区在线视频| 欧美亚洲综合久久| 欧美做爰猛烈大尺度电影无法无天| youjizz国产精品| 国产超碰在线一区| 国产一区二三区| 韩国在线一区二区| 国产一区二区三区综合 | 2023国产精品| 日韩精品一区二区三区中文精品| 欧美喷水一区二区| 9191成人精品久久| 91精品国产全国免费观看| 欧美高清www午色夜在线视频| 欧美日韩精品免费观看视频| 在线观看网站黄不卡| 在线看不卡av| 欧美人动与zoxxxx乱| 91精品国产综合久久婷婷香蕉| 欧美精品亚洲一区二区在线播放| 欧美无乱码久久久免费午夜一区| 欧美亚洲丝袜传媒另类| 欧美日韩小视频| 日韩一区二区三区视频| 欧美v日韩v国产v| 日本一区二区免费在线观看视频 | 久草这里只有精品视频| 韩国在线一区二区| 99久久精品国产一区| 91激情在线视频| 欧美精品在线观看一区二区| 日韩欧美专区在线| 中文字幕免费不卡| 一区二区三区四区av| 日本欧美一区二区三区| 国产综合久久久久久鬼色 | 日韩中文字幕一区二区三区| 久久精品理论片| 99久久精品免费精品国产| 欧美人体做爰大胆视频| 久久色.com| 一区二区三区在线影院| 奇米精品一区二区三区在线观看一| 国产在线播精品第三| 97久久超碰国产精品电影| 欧美一卡2卡3卡4卡| 国产精品成人免费精品自在线观看| 亚洲综合成人网| 韩国成人精品a∨在线观看| 色素色在线综合| 久久综合国产精品| 亚洲无人区一区| 不卡一卡二卡三乱码免费网站| 欧美区在线观看| 自拍偷拍国产亚洲| 国模套图日韩精品一区二区| 91久久精品网| 国产精品免费免费| 久久福利资源站| 欧美高清视频不卡网|