📄 regexpscanner.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 + -