30
30
class CRecognizer {
31
CScanBuffer scan_buffer;
32
31
CCommentRecognizer comment_recognizer;
33
32
Array<KeywordRecognizer*> additional_keyword_recognizers;
35
CScanBuffer scan_buffer; // TODO: temporarily made public!
36
37
typedef enum { NORMAL, IN_COMP_DIR, IN_PRE_DIR } Mode;
37
typedef enum { COMMENT, PRE_DIR, COMP_DIR, WHITE, PRE, STRING, CORE,
38
typedef enum { COMMENT, PRE_DIR, COMP_DIR, WHITE, PRE, CORE,
38
39
KEYWORD, ID, WILDCARD, UNKNOWN } Lang;
40
CRecognizer () : wildcards (false), aspectc (false), macro_ops (false),
41
CRecognizer () : directives(true), wildcards (false),
42
aspectc (false), macro_ops (false),
41
43
std_c (true), std_cplusplus (true) {}
42
CRecognizer (ScanBuffer& buffer) : wildcards (false), aspectc (false),
43
macro_ops (false) { setup (buffer); }
44
void allow_directives (bool flag = true) { directives = flag; }
44
45
void allow_wildcards (bool flag = true) { wildcards = flag; }
45
46
void allow_aspectc (bool flag = true) { aspectc = flag; }
46
47
void allow_macro_ops (bool flag = true) { macro_ops = flag; }
47
48
void allow_std_c (bool flag = true) { std_c = flag; }
48
49
void allow_std_cplusplus (bool flag = true) { std_cplusplus = flag; }
49
void setup (ScanBuffer &buffer);
50
51
int recognize (Lang &lang, int &expr, int &len);
51
Mode mode () { return scan_mode; }
52
bool new_line () const { return scan_buffer.new_line (); }
52
Mode mode () const { return scan_mode; }
53
void mode (Mode mode) { scan_mode = mode; }
53
54
CScanBuffer& buffer () { return scan_buffer; }
54
55
void addRecognizer(KeywordRecognizer &recognizer)
55
56
{ additional_keyword_recognizers.append(&recognizer); }
58
static MappedOrangeRecognizer<CScanBuffer> string_recognizer;
59
59
static MappedOrangeRecognizer<CScanBuffer> pre_dir_recognizer;
60
60
static MappedOrangeRecognizer<CScanBuffer> pre_token_recognizer;
61
61
static OrangeRecognizer<CScanBuffer> dir_recognizer;
62
static MappedOrangeRecognizer<CScanBuffer> whitespace_recognizer;
63
62
static MappedOrangeRecognizer<CScanBuffer> wildcard_recognizer;
64
63
static MappedOrangeRecognizer<CScanBuffer> core_recognizer;
65
64
static MappedOrangeRecognizer<CScanBuffer> identifier_recognizer;