Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
// 私有读取下一个词语的方法
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);
		}
	}
}