QStringList GmacsPreprocessor::getTypeObjectLines(const QStringList &list, int start_idx) { int size = list.size(); int brace_cont = 0; QRegExp left_brace("\\b{\\b"); QRegExp right_brace("\\b}\\b"); QStringList ret; for (int i = start_idx; i < size; i++) { QString line = list[i]; //qDebug() << line; int idx = left_brace.indexIn(line); if (idx >= 0) brace_cont++; idx = right_brace.indexIn(line); if (idx >= 0) brace_cont--; ret << line + "\n"; if (brace_cont <= 0) break; } //qDebug() << "==============="; //qDebug() << ret; return ret; }
// 私有读取下一个词语的方法 Token TokenAnalyze::_next_token() { if(!filein) // 输入流打开错误 { return Token("",token_type::ENDOFFILE,line_number); } char ch; // 首先过滤空白符 while(filein.get(ch) && is_space(ch)) if(ch == '\n') line_number ++ ; if(is_letter(ch)) { return identifier(ch); } else if(is_digit(ch)) { return number(ch); } else { switch(ch) { case '\'': return char_con(ch);break; case '"': return string_con(ch);break; case '+': case '-': return add_operator(ch);break; case '*': case '/': return multiply_operator(ch);break; case '=': return assign_equal_operator(ch);break; case '<': case '>': case '!': return relation_operator(ch);break; case ';': return is_semicn(ch);break; case ',': return is_comma(ch);break; case '(': return left_parent(ch);break; case ')': return right_parent(ch);break; case '[': return left_brack(ch);break; case ']': return right_brack(ch);break; case '{': return left_brace(ch);break; case '}': return right_brace(ch);break; default: return Token(""+ch,token_type::UNKNOWN,line_number); } } }