diff options
author | Cristian Cadar <c.cadar@imperial.ac.uk> | 2019-07-25 22:22:55 +0100 |
---|---|---|
committer | MartinNowack <martin.nowack@gmail.com> | 2019-07-30 21:40:30 +0100 |
commit | 9b3c98850572f0729afe97ffde16d05a7e6e691b (patch) | |
tree | 886a893600961d6d1287ea716f5c776597a65fc9 /include/expr/Lexer.h | |
parent | d1f714b72da1674f6f784a8a1b2a6179f103b723 (diff) | |
download | klee-9b3c98850572f0729afe97ffde16d05a7e6e691b.tar.gz |
Consolidated Expr-related include files into a single include/klee/Expr directory. This improves the organization of the code, and also makes it easier to reuse Expr outside KLEE.
Diffstat (limited to 'include/expr/Lexer.h')
-rw-r--r-- | include/expr/Lexer.h | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/include/expr/Lexer.h b/include/expr/Lexer.h deleted file mode 100644 index 14ae7f85..00000000 --- a/include/expr/Lexer.h +++ /dev/null @@ -1,121 +0,0 @@ -//===-- Lexer.h -------------------------------------------------*- C++ -*-===// -// -// The KLEE Symbolic Virtual Machine -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef KLEE_LEXER_H -#define KLEE_LEXER_H - -#include <string> - -namespace llvm { - class MemoryBuffer; -} - -namespace klee { -namespace expr { - struct Token { - enum Kind { - At, ///< '@' - Arrow, ///< '->' - Colon, ///< ':' - Comma, ///< ',' - Comment, ///< #[^\n]+ - EndOfFile, ///< <end of file> - Equals, ///< ' = ' - Identifier, ///< [a-zA-Z_][a-zA-Z0-9._]* - KWArray, ///< 'array' - KWFalse, ///< 'false' - KWQuery, ///< 'query' - KWReserved, ///< fp[0-9]+([.].*)?, i[0-9]+ - KWSymbolic, ///< 'symbolic' - KWTrue, ///< 'true' - KWWidth, ///< w[0-9]+ - LBrace, ///< '{' - LParen, ///< '(' - LSquare, ///< '[' - Number, ///< [+-]?[0-9][a-zA-Z0-9_]+ - RBrace, ///< '}' - RParen, ///< ')' - RSquare, ///< ']' - Semicolon, ///< ';' - Unknown, ///< <other> - - KWKindFirst=KWArray, - KWKindLast=KWWidth - }; - - Kind kind; /// The token kind. - const char *start; /// The beginning of the token string. - unsigned length; /// The length of the token. - unsigned line; /// The line number of the start of this token. - unsigned column; /// The column number at the start of - /// this token. - - /// getKindName - The name of this token's kind. - const char *getKindName() const; - - /// getString - The string spanned by this token. This is not - /// particularly efficient, use start and length when reasonable. - std::string getString() const { return std::string(start, length); } - - /// isKeyword - True if this token is a keyword. - bool isKeyword() const { - return kind >= KWKindFirst && kind <= KWKindLast; - } - - // dump - Dump the token to stderr. - void dump(); - - Token() : kind(Unknown), start(nullptr) {} - }; - - /// Lexer - Interface for lexing tokens from a .kquery language file. - class Lexer { - const char *BufferPos; /// The current lexer position. - const char *BufferEnd; /// The buffer end position. - unsigned LineNumber; /// The current line. - unsigned ColumnNumber; /// The current column. - - /// GetNextChar - Eat a character or -1 from the stream. - int GetNextChar(); - - /// PeekNextChar - Return the next character without consuming it - /// from the stream. This does not perform newline - /// canonicalization. - int PeekNextChar(); - - /// SetTokenKind - Set the token kind and length (using the - /// token's start pointer, which must have been initialized). - Token &SetTokenKind(Token &Result, Token::Kind k); - - /// SetTokenKind - Set an identifiers token kind. This has the - /// same requirements as SetTokenKind and additionally takes care - /// of keyword recognition. - Token &SetIdentifierTokenKind(Token &Result); - - void SkipToEndOfLine(); - - /// LexNumber - Lex a number which does not have a base specifier. - Token &LexNumber(Token &Result); - - /// LexIdentifier - Lex an identifier. - Token &LexIdentifier(Token &Result); - - public: - explicit Lexer(const llvm::MemoryBuffer *_buf); - ~Lexer(); - - /// Lex - Return the next token from the file or EOF continually - /// when the end of the file is reached. The input argument is - /// used as the result, for convenience. - Token &Lex(Token &Result); - }; -} -} - -#endif /* KLEE_LEXER_H */ |