Lexer.h

Go to the documentation of this file.
00001 //===-- Lexer.h -------------------------------------------------*- C++ -*-===//
00002 //
00003 //                     The KLEE Symbolic Virtual Machine
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 
00010 #ifndef KLEE_EXPR_LEXER_H
00011 #define KLEE_EXPR_LEXER_H
00012 
00013 #include <string>
00014 
00015 namespace llvm {
00016   class MemoryBuffer;
00017 }
00018 
00019 namespace klee {
00020 namespace expr {
00021   struct Token {
00022     enum Kind {
00023       At,                       
00024       Arrow,                    
00025       Colon,                    
00026       Comma,                    
00027       Comment,                  
00028       EndOfFile,                
00029       Equals,                   
00030       Identifier,               
00031       KWFalse,                  
00032       KWQuery,                  
00033       KWReserved,               
00034       KWTrue,                   
00035       KWWidth,                  
00036       LBrace,                   
00037       LParen,                   
00038       LSquare,                  
00039       Number,                   
00040       RBrace,                   
00041       RParen,                   
00042       RSquare,                  
00043       Semicolon,                
00044       Unknown                   
00045     };
00046 
00047     Kind        kind;           
00048     const char *start;          
00049     unsigned    length;         
00050     unsigned    line;           
00051     unsigned    column;         
00052 
00053 
00055     const char *getKindName() const;
00056 
00059     std::string getString() const { return std::string(start, length); }
00060 
00062     bool isKeyword() const { 
00063       return kind >= KWFalse && kind <= KWTrue; 
00064     }
00065 
00066     // dump - Dump the token to stderr.
00067     void dump();
00068   };
00069 
00071   class Lexer {
00072     const char *BufferPos;      
00073     const char *BufferEnd;      
00074     unsigned    LineNumber;     
00075     unsigned    ColumnNumber;   
00076 
00078     int GetNextChar();
00079 
00083     int PeekNextChar();
00084 
00087     Token &SetTokenKind(Token &Result, Token::Kind k);
00088 
00092     Token &SetIdentifierTokenKind(Token &Result);
00093   
00094     void SkipToEndOfLine();
00095 
00097     Token &LexNumber(Token &Result);
00098 
00100     Token &LexIdentifier(Token &Result);
00101 
00102   public:
00103     explicit Lexer(const llvm::MemoryBuffer *_buf);
00104     ~Lexer();
00105 
00109     Token &Lex(Token &Result);
00110   };
00111 }
00112 }
00113 
00114 #endif

Generated on Fri Jun 5 03:31:31 2009 for klee by  doxygen 1.5.8