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

📄 fooscanner.cpp

📁 用于词法分析的词法分析器
💻 CPP
字号:
/*  $Id: FooScanner.cpp,v 1.5 1997/02/02 01:31:01 matt Exp $  FOO scanner class.    (c) Feb 96 Matt Phillips  */#include <ctype.h>#include <util/checks.h>#include "FooScanner.h"void FooScanner::getIdent (){  while (isalnum (input.peek ()) || input.peek () == '_')  {    input.get ();  }  symbol = SymIdent;}void FooScanner::handleBackslash (){  input.skip ();  char chr = input.peek ();  // handle \xx format  if (isxdigit (chr))  {    int value = 0;        // read up to 2 hex digits    for (int count = 2;	 count > 0 && !input.eof () && isxdigit (input.peek ());	 count--, input.skip ())    {      value *= 16;      if (isdigit (input.peek ()))	value += input.peek () - '0';      else	value += tolower (input.peek ()) - 'a' + 10;    }    chr = (char)value;  } else    input.skip ();  input.pushBuffer (chr);}void FooScanner::getString (){  input.clearBuffer ();  while (input.peek () != '"' && !input.eof ())  {    if (input.peek () == '\\')      handleBackslash ();    else      input.get ();  }  input.skip ();		// lose terminating "  if (input.eof ())    warning ("unterminated string");  symbol = SymString;}void FooScanner::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;  }  if (!input.eof ())  {    symLine = input.getLine ();    symCol = input.getColumn ();    if (isalnum (input.peek ()) || input.peek () == '_')    {      getIdent ();    } else    {      int chr = input.peek ();      input.get ();	       switch (chr)      {      case '"':	getString ();	break;      case '(':	symbol = SymLBracket;	break;      case ')':	symbol = SymRBracket;	break;      case '[':	symbol = SymLSBracket;	break;      case ']':	symbol = SymRSBracket;	break;      default:	input.get ();	error ("illegal symbol");      }    }  } else  {    symbol = SymEOF;  }}

⌨️ 快捷键说明

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