193 } |
193 } |
194 return _graph.direct(it->second, str[0] == '+'); |
194 return _graph.direct(it->second, str[0] == '+'); |
195 } |
195 } |
196 }; |
196 }; |
197 |
197 |
198 bool isWhiteSpace(char c) { |
198 inline bool isWhiteSpace(char c) { |
199 return c == ' ' || c == '\t' || c == '\v' || |
199 return c == ' ' || c == '\t' || c == '\v' || |
200 c == '\n' || c == '\r' || c == '\f'; |
200 c == '\n' || c == '\r' || c == '\f'; |
201 } |
201 } |
202 |
202 |
203 bool isOct(char c) { |
203 inline bool isOct(char c) { |
204 return '0' <= c && c <='7'; |
204 return '0' <= c && c <='7'; |
205 } |
205 } |
206 |
206 |
207 int valueOct(char c) { |
207 inline int valueOct(char c) { |
208 LEMON_ASSERT(isOct(c), "The character is not octal."); |
208 LEMON_ASSERT(isOct(c), "The character is not octal."); |
209 return c - '0'; |
209 return c - '0'; |
210 } |
210 } |
211 |
211 |
212 bool isHex(char c) { |
212 inline bool isHex(char c) { |
213 return ('0' <= c && c <= '9') || |
213 return ('0' <= c && c <= '9') || |
214 ('a' <= c && c <= 'z') || |
214 ('a' <= c && c <= 'z') || |
215 ('A' <= c && c <= 'Z'); |
215 ('A' <= c && c <= 'Z'); |
216 } |
216 } |
217 |
217 |
218 int valueHex(char c) { |
218 inline int valueHex(char c) { |
219 LEMON_ASSERT(isHex(c), "The character is not hexadecimal."); |
219 LEMON_ASSERT(isHex(c), "The character is not hexadecimal."); |
220 if ('0' <= c && c <= '9') return c - '0'; |
220 if ('0' <= c && c <= '9') return c - '0'; |
221 if ('a' <= c && c <= 'z') return c - 'a' + 10; |
221 if ('a' <= c && c <= 'z') return c - 'a' + 10; |
222 return c - 'A' + 10; |
222 return c - 'A' + 10; |
223 } |
223 } |
224 |
224 |
225 bool isIdentifierFirstChar(char c) { |
225 inline bool isIdentifierFirstChar(char c) { |
226 return ('a' <= c && c <= 'z') || |
226 return ('a' <= c && c <= 'z') || |
227 ('A' <= c && c <= 'Z') || c == '_'; |
227 ('A' <= c && c <= 'Z') || c == '_'; |
228 } |
228 } |
229 |
229 |
230 bool isIdentifierChar(char c) { |
230 inline bool isIdentifierChar(char c) { |
231 return isIdentifierFirstChar(c) || |
231 return isIdentifierFirstChar(c) || |
232 ('0' <= c && c <= '9'); |
232 ('0' <= c && c <= '9'); |
233 } |
233 } |
234 |
234 |
235 char readEscape(std::istream& is) { |
235 inline char readEscape(std::istream& is) { |
236 char c; |
236 char c; |
237 if (!is.get(c)) |
237 if (!is.get(c)) |
238 throw DataFormatError("Escape format error"); |
238 throw DataFormatError("Escape format error"); |
239 |
239 |
240 switch (c) { |
240 switch (c) { |