Методы синтаксического анализа на базе регулярных выражений
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
g->cap(1);
if (vars.indexOf(var)>-1)
ParseExpr (reg->cap(2));
else
result=6;
}else
{
result=9;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}(result!=0)return line_nmb;
}(QString label,nlabels)
if (labels.indexOf(label)==-1)result=5;
}MainWindow::ParseExpr(QString expr){=expr.trimmed();(expr=="")result=4;ok;.toInt(&ok, 10);(ok)return;(vars.indexOf(expr)!=-1)return;*reg;=new QRegExp("^int ([a-z]+)$");(reg->indexIn(expr)>-1){
vars.append(reg->cap(1));
return;
}=new QRegExp("^int ([a-z]+)=([0-9]+)$");(reg->indexIn(expr)>-1){
vars.append(reg->cap(1));
return;
}=new QRegExp("^([a-z]+[a-z0-9]+)\\[(.+)\\]$");(reg->indexIn(expr)>-1){
if (arrays.indexOf(reg->cap(1))!=-1){
ParseExpr(reg->cap(2));
return;
}
}operands=QStringList()"<<"<"<<"="<<"+"<<"-";(QString operand,operands)(expr.indexOf(operand)!=-1){
QStringList exprs=expr.split(operand);
foreach(QString exp,exprs)
ParseExpr(exp);
return;
}=new QRegExp("^'.'$");(reg->indexIn(expr)>-1)
return;=new QRegExp("^\"[a-z ]*\"$");(reg->indexIn(expr)>-1)
return;(expr=="'\\0'")return;=10;
}MainWindow::ShowCode(QString qwer){code=qwer.split("\n");incl=0;>clear();(QString line,code){
incl-=line.count("}");
line=line.trimmed();
for(int i=0;i<incl;i++)
line="\t"+line;
formated->append(line);
incl+=line.count("{");
}
}::~MainWindow()
{
}