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

📄 regexpscanner.cpp

📁 用于词法分析的词法分析器
💻 CPP
字号:
/*  $Id: RegexpScanner.cpp,v 1.5 1997/02/23 13:35:19 matt Exp $  Regular expression scanner class.    (c) Apr 1996 Matthew Phillips.  */#include "RegexpScanner.h"int RegexpScanner::handleVariable (){  input.clearBuffer ();  while (input.peek () != '>')  {    if (input.eof ())    {      error ("unterminated variable name");      break;    }    input.get ();  }  input.skip ();		// lose terminating }  return SymVariable;}char RegexpScanner::readDecNum (){  int value = 0;   // read up to 3 decimal digits  for (int count = 3;       count > 0 && !input.eof () && isdigit (input.peek ());       count--, input.skip ())  {    value *= 10;    value += input.peek () - '0';  }  return (char)value;}char RegexpScanner::readHexNum (){  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;  }  return (char)value;}int RegexpScanner::handleBackslash (){  char chr = input.peek ();  switch (chr)  {  case 'n':    chr = '\n';    input.skip ();    break;  case 't':    chr = '\t';    input.skip ();    break;  case 'v':    chr = '\v';    input.skip ();    break;  case 'a':    chr = '\a';    input.skip ();    break;  case 'f':    chr = '\f';    input.skip ();    break;  case 'b':    chr = '\b';    input.skip ();    break;  case 'r':    chr = '\r';    input.skip ();    break;  case 'x':  case 'X':    input.skip ();    chr = readHexNum ();    break;  default:    if (isdigit (chr))    {      chr = readDecNum ();    } else      input.skip ();  }  input.setBuffer (chr);  return SymChar;}void RegexpScanner::getNext (){  symLine = input.getLine ();  symCol = input.getColumn ();  if (!input.eof ())  {    input.clearBuffer ();    int chr = input.peek ();    input.get ();        switch (chr)    {    case '.':      symbol = SymDot;      break;    case '(':      symbol = SymLBracket;      break;    case ')':      symbol = SymRBracket;      break;    case '[':      symbol = SymLSBracket;      break;    case ']':      symbol = SymRSBracket;      break;    case '<':      symbol = handleVariable ();      break;    case '~':      symbol = SymTilde;      break;    case '?':      symbol = SymQuestion;      break;    case '^':      symbol = SymCaret;      break;    case '*':      symbol = SymStar;      break;    case '+':      symbol = SymPlus;      break;    case '-':      symbol = SymMinus;      break;    case '|':      symbol = SymBar;      break;    case '\\':      symbol = handleBackslash ();      break;    default:      symbol = SymChar;    }  } else  {    symbol = SymEOF;  }}

⌨️ 快捷键说明

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