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