1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// lexer.h see license.txt for copyright and terms of use
// lexer for Java source files
#ifndef LEXER_H
#define LEXER_H
#include "baselexer.h" // BaseLexer
#include "java_tokens.h" // TokenType
// fwd decls
class JavaLang; // java_lang.h
// bounds-checking functional interfaces to tables declared in java_tokens.h
char const *toString(TokenType type);
TokenFlag tokenFlags(TokenType type);
// lexer object
class Lexer : public BaseLexer {
private: // data
bool prevIsNonsep; // true if last-yielded token was nonseparating
public: // data
JavaLang ⟨ // language options
protected: // funcs
// see comments at top of lexer.cc
void checkForNonsep(TokenType t) {
if (tokenFlags(t) & TF_NONSEPARATOR) {
if (prevIsNonsep) {
err("two adjacent nonseparating tokens");
}
prevIsNonsep = true;
}
else {
prevIsNonsep = false;
}
}
// consume whitespace
void whitespace();
// do everything for a single-spelling token
int tok(TokenType t);
// do everything for a multi-spelling token
int svalTok(TokenType t);
FLEX_OUTPUT_METHOD_DECLS
public: // funcs
// make a lexer to scan the given file
Lexer(StringTable &strtable, JavaLang &lang, char const *fname);
Lexer(StringTable &strtable, JavaLang &lang, SourceLoc initLoc,
char const *buf, int len);
~Lexer();
static void tokenFunc(LexerInterface *lex);
static void _tokenFunc(LexerInterface *lex);
// LexerInterface funcs
virtual NextTokenFunc getTokenFunc() const;
virtual string tokenDesc() const;
virtual string tokenKindDesc(int kind) const;
};
#endif // LEXER_H
|