⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elexscanner.cpp

📁 用于词法分析的词法分析器
💻 CPP
字号:
/*  $Id: ElexScanner.cpp,v 1.9 1997/05/18 10:58:17 matt Exp $  Elex script scanner class.  (c) 1996 Matt Phillips.  */#include <ctype.h>#include <util/checks.h>#include "ElexScanner.h"struct KeyWord{  char *name;  int symbol;};static KeyWord keyWords [] = {  {"scanner", ElexScanner::SymScanner},  {"symbols", ElexScanner::SymSymbols},  {"defines", ElexScanner::SymDefines},  {"begin", ElexScanner::SymBegin},  {"end", ElexScanner::SymEnd},  {"on", ElexScanner::SymOn},  {0, 0}			// sentinel};void ElexScanner::getString (){  input.clearBuffer ();  while (input.peek () != '"')  {    if (input.eof ())    {      error ("unterminated string");      break;    }    if (input.peek () == '\\') input.get ();    input.get ();  }  input.skip ();		// lose terminating "}void ElexScanner::getIdent (){  while (isalnum (input.peek ()) || input.peek () == '_')  {    input.get ();  }  // is it a keyword?    symbol = SymIdent;  string str (getText ());  for (KeyWord *keyword = keyWords; keyword->name; keyword++)  {    if (keyword->name == str)    {      symbol = keyword->symbol;      break;    }  }}void ElexScanner::getNext (){  input.clearBuffer ();  // skip whitespace/comments  for (;;)  {    if (isspace (input.peek ()))    {      input.skip ();    } else if (input.peek () == '#')    {      while (!input.inState (input.getState (),			     InputStream::stEndLine))      {	input.skip ();      }      input.skip ();    } else      break;  };  symLine = input.getLine ();  symCol = input.getColumn ();  if (!input.eof ())  {    if (isalpha (input.peek ()))    {      getIdent ();    } else    {      int chr = input.peek ();      input.get ();	       switch (chr)      {      case ':':	symbol = SymColon;	break;      case '=':	symbol = SymEquals;	break;      case ',':	symbol = SymComma;	break;      case '<':	symbol = SymLessThan;	break;      case '"':	symbol = SymString;	getString ();	break;      default:	input.get ();	error ("illegal symbol");      }    }  } else  {    symbol = SymEOF;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -