comparison src/tokenizer.cpp @ 75:1142e46be550

start coding on new config syntax
author carl
date Wed, 13 Jul 2005 23:04:14 -0700
parents b7449114ebb0
children 91c27c00048f
comparison
equal deleted inserted replaced
74:b7449114ebb0 75:1142e46be550
69 { s_single, s_term, s_string, s_single, s_eol, }, // 0x26 & 69 { s_single, s_term, s_string, s_single, s_eol, }, // 0x26 &
70 { s_single, s_term, s_string, s_single, s_eol, }, // 0x27 ' 70 { s_single, s_term, s_string, s_single, s_eol, }, // 0x27 '
71 { s_single, s_term, s_string, s_single, s_eol, }, // 0x28 ( 71 { s_single, s_term, s_string, s_single, s_eol, }, // 0x28 (
72 { s_single, s_term, s_string, s_single, s_eol, }, // 0x29 ) 72 { s_single, s_term, s_string, s_single, s_eol, }, // 0x29 )
73 { s_single, s_term, s_string, s_single, s_eol, }, // 0x2A * 73 { s_single, s_term, s_string, s_single, s_eol, }, // 0x2A *
74 { s_single, s_term, s_string, s_single, s_eol, }, // 0x2B + 74 { s_single, s_token, s_string, s_single, s_eol, }, // 0x2B +
75 { s_single, s_term, s_string, s_single, s_eol, }, // 0x2C , 75 { s_single, s_term, s_string, s_single, s_eol, }, // 0x2C ,
76 { s_single, s_token, s_string, s_single, s_eol, }, // 0x2D - 76 { s_single, s_token, s_string, s_single, s_eol, }, // 0x2D -
77 { s_single, s_token, s_string, s_single, s_eol, }, // 0x2E . 77 { s_single, s_token, s_string, s_single, s_eol, }, // 0x2E .
78 { s_slash, s_term, s_string, s_slash, s_eol, }, // 0x2F / 78 { s_slash, s_token, s_string, s_slash, s_eol, }, // 0x2F /
79 { s_token, s_token, s_string, s_token, s_eol, }, // 0x30 0 79 { s_token, s_token, s_string, s_token, s_eol, }, // 0x30 0
80 { s_token, s_token, s_string, s_token, s_eol, }, // 0x31 1 80 { s_token, s_token, s_string, s_token, s_eol, }, // 0x31 1
81 { s_token, s_token, s_string, s_token, s_eol, }, // 0x32 2 81 { s_token, s_token, s_string, s_token, s_eol, }, // 0x32 2
82 { s_token, s_token, s_string, s_token, s_eol, }, // 0x33 3 82 { s_token, s_token, s_string, s_token, s_eol, }, // 0x33 3
83 { s_token, s_token, s_string, s_token, s_eol, }, // 0x34 4 83 { s_token, s_token, s_string, s_token, s_eol, }, // 0x34 4
87 { s_token, s_token, s_string, s_token, s_eol, }, // 0x38 8 87 { s_token, s_token, s_string, s_token, s_eol, }, // 0x38 8
88 { s_token, s_token, s_string, s_token, s_eol, }, // 0x39 9 88 { s_token, s_token, s_string, s_token, s_eol, }, // 0x39 9
89 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3A : 89 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3A :
90 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3B ; 90 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3B ;
91 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3C < 91 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3C <
92 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3D = 92 { s_single, s_token, s_string, s_single, s_eol, }, // 0x3D =
93 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3E > 93 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3E >
94 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3F ? 94 { s_single, s_term, s_string, s_single, s_eol, }, // 0x3F ?
95 { s_single, s_token, s_string, s_single, s_eol, }, // 0x40 @ 95 { s_single, s_token, s_string, s_single, s_eol, }, // 0x40 @
96 { s_token, s_token, s_string, s_token, s_eol, }, // 0x41 A 96 { s_token, s_token, s_string, s_token, s_eol, }, // 0x41 A
97 { s_token, s_token, s_string, s_token, s_eol, }, // 0x42 B 97 { s_token, s_token, s_string, s_token, s_eol, }, // 0x42 B
317 } 317 }
318 318
319 319
320 bool TOKEN::next_char(u_char &uc) { 320 bool TOKEN::next_char(u_char &uc) {
321 if (pushed) { 321 if (pushed) {
322 uc = pushed_char; 322 uc = (u_char)tolower((char)pushed_char);
323 pushed = false; 323 pushed = false;
324 return true; 324 return true;
325 } 325 }
326 while (!streams.empty() && streams.front()->eof()) { 326 while (!streams.empty() && streams.front()->eof()) {
327 pop(); 327 pop();
332 if (is->eof()) return next_char(uc); 332 if (is->eof()) return next_char(uc);
333 if (uc == (u_char)'\n') { 333 if (uc == (u_char)'\n') {
334 int &line = linenumbers.front(); 334 int &line = linenumbers.front();
335 line++; 335 line++;
336 } 336 }
337 uc = (u_char)tolower((char)uc);
337 return true; 338 return true;
338 } 339 }
339 340
340 341
341 bool TOKEN::include(char *fn) { 342 bool TOKEN::include(char *fn) {
498 if (!h) h = "null"; 499 if (!h) h = "null";
499 printf(fmt, t, h); 500 printf(fmt, t, h);
500 } 501 }
501 502
502 503
503 void TOKEN::token_error(const char *token, const char *have) { 504 void TOKEN::token_error(const char *want, const char *have) {
504 token_error(); 505 token_error();
505 token_error("expecting %s, found %s \n", token, have); 506 token_error("expecting %s, found %s \n", want, have);
506 } 507 }
507 508
508 509
509 void TOKEN::token_error() { 510 void TOKEN::token_error() {
510 token_error("syntax error at line %d in file %s -- ", cur_line(), cur_fn()); 511 token_error("syntax error at line %d in file %s -- ", cur_line(), cur_fn());
511 } 512 line_list::iterator j = linenumbers.begin();
512 513 string_list::iterator i = filenames.begin();
514 for (; i!=filenames.end(); i++,j++) {
515 if (i != filenames.begin()) {
516 char *fn = (*i);
517 int li = (*j);
518 token_error("\n included from line %d in file %s -- ", li, fn);
519 }
520 }
521 }
522