1 /* $Id: scanner.h 860 2008-04-09 22:57:45Z nuno-lopes $ */
18 char *tok
, *ptr
, *cur
, *pos
, *ctx
; // positioning
19 char *bot
, *lim
, *top
, *eof
; // buffer
20 uint tchar
, tline
, cline
, iscfg
, buf_size
;
25 public line_number
, private ScannerState
32 char *fill(char*, uint
);
33 Scanner(const Scanner
&); //unimplemented
34 Scanner
& operator=(const Scanner
&); //unimplemented
35 void set_sourceline(char *& cursor
);
38 Scanner(std::istream
&, std::ostream
&);
52 size_t get_pos() const;
53 void save_state(ScannerState
&) const;
54 void restore_state(const ScannerState
&);
56 uint
get_cline() const;
57 void set_in_parse(bool new_in_parse
);
58 void fatal_at(uint line
, uint ofs
, const char *msg
) const;
59 void fatalf_at(uint line
, const char*, ...) const;
60 void fatalf(const char*, ...) const;
61 void fatal(const char*) const;
62 void fatal(uint
, const char*) const;
64 void config(const Str
&, int);
65 void config(const Str
&, const Str
&);
67 void check_token_length(char *pos
, uint len
) const;
69 SubStr
token(uint start
, uint len
) const;
70 Str
raw_token(std::string enclosure
) const;
71 virtual uint
get_line() const;
72 uint
xlat(uint c
) const;
74 uint
unescape(SubStr
&s
) const;
75 std::string
& unescape(SubStr
& str_in
, std::string
& str_out
) const;
77 Range
* getRange(SubStr
&s
) const;
78 RegExp
* matchChar(uint c
) const;
79 RegExp
* strToName(SubStr s
) const;
80 RegExp
* strToRE(SubStr s
) const;
81 RegExp
* strToCaseInsensitiveRE(SubStr s
) const;
82 RegExp
* ranToRE(SubStr s
) const;
83 RegExp
* getAnyRE() const;
84 RegExp
* invToRE(SubStr s
) const;
85 RegExp
* mkDot() const;
88 inline size_t Scanner::get_pos() const
93 inline uint
Scanner::get_line() const
98 inline uint
Scanner::get_cline() const
103 inline void Scanner::save_state(ScannerState
& state
) const
108 inline void Scanner::fatal(const char *msg
) const
113 inline SubStr
Scanner::token() const
115 check_token_length(tok
, cur
- tok
);
116 return SubStr(tok
, cur
- tok
);
119 inline SubStr
Scanner::token(uint start
, uint len
) const
121 check_token_length(tok
+ start
, len
);
122 return SubStr(tok
+ start
, len
);
125 inline uint
Scanner::xlat(uint c
) const
127 return re2c::wFlag
? c
: re2c::xlat
[c
& 0xFF];
130 } // end namespace re2c