AXIS_DESCR::AXIS_DESCR( Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->axis_descr.namePar; typePar = &gram->axis_descr.typePar; factoryOptNode = &gram->axis_descr.factoryOptNode; factoryOptItem = &gram->axis_descr.factoryOptItem; //optional Parameters occOptPar = new QHash<QString, Occurence>; occOptPar->insert("FORMAT", ZeroOrOne); occOptPar->insert("EXTENDED_LIMITS", ZeroOrOne); occOptPar->insert("DEPOSIT", ZeroOrOne); occOptPar->insert("AXIS_PTS_REF", ZeroOrOne); occOptPar->insert("FIX_AXIS_PAR", ZeroOrOne); occOptPar->insert("READ_ONLY", ZeroOrOne); occOptPar->insert("FIX_AXIS_PAR_DIST", ZeroOrOne); occOptPar->insert("BYTE_ORDER", ZeroOrOne); //Set the line where the Node starts in ASAP file this->a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS parseFixPar(typePar); if (parameters.count() > 0) name = parameters.at(0); else name = (char*)"axis_descr"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(occOptPar); //End if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "AXIS_DESCR") { //Sort the childNodes //std::sort(this->childNodes.begin(), this->childNodes.end(), nodeLessThan); //Sort The childItems //std::sort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd AXIS_DESCR\nfind token : " + s ); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end AXIS_DESCR\nfind : " + s1 + " " + s2 ); } }
GGROUP::GGROUP(Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->group.namePar; typePar = &gram->group.typePar; factoryOptNode = &gram->group.factoryOptNode; factoryOptItem = &gram->group.factoryOptItem; //opt parameters occOptPar = new QMap<std::string, Occurence>; occOptPar->insert("ANNOTATION", ZeroOrMore); occOptPar->insert("FUNCTION_LIST", ZeroOrOne); occOptPar->insert("IF_DATA", ZeroOrMore); occOptPar->insert("REF_CHARACTERISTIC", ZeroOrOne); occOptPar->insert("REF_MEASUREMENT", ZeroOrOne); occOptPar->insert("ROOT", ZeroOrOne); occOptPar->insert("SUB_GROUP", ZeroOrOne); //Set the line where the Node starts in ASAP file this->a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS parseFixPar(typePar); if (parameters.count() > 0) name = parameters.at(0); else name = (char*)"GROUP"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(occOptPar); //End if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "GROUP") { //Sort the childNodes //std::sort(this->childNodes.begin(), this->childNodes.end(), nodeLessThan); //Sort The childItems //std::sort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd GROUP\nfind token : " + s ); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end GROUP\nfind : " + s1 + " " + s2 ); } }
ANNOTATION::ANNOTATION( Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->annotation.namePar; typePar = &gram->annotation.typePar; factoryOptNode = &gram->annotation.factoryOptNode; factoryOptItem = &gram->annotation.factoryOptItem; //opt Parameters occOptPar = new QMap<std::string, Occurence>; occOptPar->insert("ANNOTATION_LABEL", ZeroOrOne); occOptPar->insert("ANNOTATION_ORIGIN", ZeroOrOne); occOptPar->insert("ANNOTATION_TEXT", ZeroOrOne); //Set the line where the Node starts in ASAP file this->a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS //parseFixPar(typePar, namePar ,in, parent); //parameters = 0; name = (char*)"ANNOTATION"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(occOptPar); //End if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "ANNOTATION") { //Sort the childNodes //std::sort(this->childNodes.begin(), this->childNodes.end(), nodeLessThan); //Sort The childItems //std::sort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd PROJECT\nfind token : " + s ); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end PROJECT\nfind : " + s1 + " " + s2 ); } //only a test //parse(in); }
UNIT::UNIT(Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->unit.namePar; typePar = &gram->unit.typePar; factoryOptNode = &gram->unit.factoryOptNode; factoryOptItem = &gram->unit.factoryOptItem; //opt parameters occOptPar = new QMap<std::string, Occurence>; occOptPar->insert("REF_UNIT", ZeroOrOne); occOptPar->insert("SI_EXPONENTS", ZeroOrOne); occOptPar->insert("UNIT_CONVERSION", ZeroOrOne); //Set the line where the Node starts in ASAP file this->a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS parseFixPar(typePar); if (parameters.count() > 0) name = parameters.at(0); else name = (char*)"UNIT"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(occOptPar); //End if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "UNIT") { //Sort the childNodes //qSort(this->childNodes.begin(), this->childNodes.end(), nodeLessThan); //Sort The childItems //qSort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd UNIT\nfind token : " + s ); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end UNIT\nfind : " + s1 + " " + s2 ); } }
FUNCTION::FUNCTION( Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->function.namePar; typePar = &gram->function.typePar; factoryOptNode = &gram->function.factoryOptNode; factoryOptItem = &gram->function.factoryOptItem; //Set the line where the Node starts in ASAP file a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS parseFixPar(typePar); if (parameters.count() > 0) name = parameters.at(0); else name = (char*)"function"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(); //finalize parsing if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "FUNCTION") { //Sort the childNodes foreach (Node *node, childNodes) node->sortChildrensName(); //Sort The childItems //qSort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd FUNCTION\nfind token : " + s); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end FUNCTION\nfind : " + s1 + " " + s2); } sortChildrensName(); }
COMPU_METHOD::COMPU_METHOD( Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->compu_method.namePar; typePar = &gram->compu_method.typePar; factoryOptNode = &gram->compu_method.factoryOptNode; factoryOptItem = &gram->compu_method.factoryOptItem; //Set the line where the Node starts in ASAP file a2lLine = lex->getLine(); //Parse Mandatory PARAMETERS parseFixPar(typePar); if (parameters.count() > 0) name = parameters.at(0); else name = (char*)"compu_method"; //Parse optional PARAMETERS TokenTyp token = parseOptPar(); //fianlize parsing if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "COMPU_METHOD") { //Sort the childNodes //qSort(this->childNodes.begin(), this->childNodes.end(), nodeLessThan); //Sort The childItems //qSort(this->optItems.begin(), this->optItems.end(), itemLessThan); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd COMPU_METHOD\nfind token : " + s); } } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end COMPU_METHOD\nfind : " + s1 + " " + s2); } }
MODULE::MODULE(Node *parentNode) : Node(parentNode, parentNode->lex, parentNode->errorList) { //get grammar A2lGrammar* gram = parentNode->lex->grammar; namePar = &gram->module.namePar; typePar = &gram->module.typePar; factoryOptNode = &gram->module.factoryOptNode; factoryOptItem = &gram->module.factoryOptItem; //opt Parameters occOptPar = new QMap<std::string, Occurence>; occOptPar->insert("CHARACTERISTIC", ZeroOrMore); occOptPar->insert("MEASUREMENT", ZeroOrMore); occOptPar->insert("IF_DATA", ZeroOrMore); occOptPar->insert("FUNCTION", ZeroOrMore); occOptPar->insert("AXIS_PTS", ZeroOrMore); occOptPar->insert("COMPU_METHOD", ZeroOrMore); occOptPar->insert("COMPU_VTAB", ZeroOrMore); occOptPar->insert("RECORD_LAYOUT", ZeroOrMore); occOptPar->insert("A2ML", ZeroOrOne); occOptPar->insert("MOD_PAR", ZeroOrOne); occOptPar->insert("MOD_COMMON", ZeroOrOne); occOptPar->insert("GROUP", ZeroOrMore); occOptPar->insert("UNIT", ZeroOrMore); //Set the line where the Node starts in ASAP file a2lLine = lex->getLine(); //check if it is a chunk for multi_threading TokenTyp token = lex->getNextToken(); if (token == Identifier && lex->getLexem() == "CHUNKstart") { stopped = true; } else { QString str = lex->getLexem().c_str(); lex->backward(str.length()); } //TokenTyp token; //Parse Mandatory PARAMETERS parseFixPar(typePar); name = parameters.at(0); //Parse optional PARAMETERS token = parseOptPar(occOptPar); //End parsing if (token == BlockEnd) { token = nextToken(); if (token == Keyword && lex->getLexem() == "MODULE") { //Sort the childNodes foreach (Node *node, childNodes) node->sortChildrensName(); } else { QString s(lex->toString(token).c_str()); this->showError("expected token : BlockEnd MODULE\nfind token : " + s); } } else if (token == Identifier && lex->getLexem() == "CHUNKend") { //Sort the childNodes foreach (Node *node, childNodes) node->sortChildrensName(); stopped = true; lex->backward(); } else { QString s1(lex->toString(token).c_str()); QString s2(lex->getLexem().c_str()); this->showError("expected end MODULE\nfind : " + s1 + " " + s2); } //Sort The childItems and childNodes qSort(optItems.begin(), optItems.end(), itemLessThan); qSort(childNodes.begin(), childNodes.end(), nodeLessThan); listChar.sort(); }