Ejemplo n.º 1
0
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 );
    }    
}
Ejemplo n.º 2
0
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 );
    }    
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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 );
    }    
}
Ejemplo n.º 5
0
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();
}
Ejemplo n.º 6
0
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);
    }
}
Ejemplo n.º 7
0
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();
}