コード例 #1
0
ファイル: Parser.cs プロジェクト: afaucher17/Hero.Coli
    public TreeNode <PromoterNodeData> ParseBool(LinkedList <PromoterLexer.Token> tokenList)
    {
        PromoterNodeData data = new PromoterNodeData();
        int    restoreStatus;
        string value = "";

        restoreStatus = getRestoreListStatus();
        if (tokenList.First().token != PromoterLexer.eToken.CHAR)
        {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax error : A word needs to begin with a Character.");
            return(null);
        }
        value += tokenList.First().c;
        popToken(tokenList);

        if (value == "T" || value == "F")
        {
            data.token = PromoterParser.eNodeType.BOOL;
        }
        else
        {
            restoreListState(tokenList, restoreStatus);
            return(null);
        }
        data.value = value;
        return(new TreeNode <PromoterNodeData>(data));
    }
コード例 #2
0
ファイル: Parser.cs プロジェクト: afaucher17/Hero.Coli
    /*!
     * \brief Parse an Operand expression
     * \param tokenList The list of tokens
     * \return Return the tree corresponding to the expression or null if the parsing fail.
     */
    public TreeNode <PromoterNodeData> ParseOperandExpr(LinkedList <PromoterLexer.Token> tokenList)
    {
        TreeNode <PromoterNodeData> left;
        TreeNode <PromoterNodeData> right;
        PromoterNodeData            data = new PromoterNodeData();
        int restoreStatus;

        restoreStatus = getRestoreListStatus();

        if ((right = ParseBool(tokenList)) != null)
        {
            data.token = PromoterParser.eNodeType.CONSTANT;
            data.value = "C";
            return(new TreeNode <PromoterNodeData>(data, null, right));
        }
        if ((left = ParseConstants(tokenList)) == null)
        {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax error : No constant defined");
            return(null);
        }
        if ((right = ParseWord(tokenList)) == null)
        {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax error : Need name for operand");
            return(null);
        }
        data.token = PromoterParser.eNodeType.CONSTANT;
        data.value = "C";
        return(new TreeNode <PromoterNodeData>(data, left, right));
    }
コード例 #3
0
ファイル: Parser.cs プロジェクト: afaucher17/Hero.Coli
    /*!
     * \brief Parse an And expression
     * \param tokenList The list of tokens
     * \return Return the tree corresponding to the expression or null if the parsing fail.
     */
    public TreeNode <PromoterNodeData> ParseAndExpr(LinkedList <PromoterLexer.Token> tokenList)
    {
        PromoterNodeData            data  = new PromoterNodeData();
        TreeNode <PromoterNodeData> left  = null;
        TreeNode <PromoterNodeData> right = null;
        int restoreStatus;

        restoreStatus = getRestoreListStatus();
        if ((left = ParseParExpr(tokenList)) == null)
        {
            restoreListState(tokenList, restoreStatus);
            return(null);
        }
        if (tokenList.First().token == PromoterLexer.eToken.OP_AND)
        {
            PromoterLexer.Token tok = tokenList.First();
            popToken(tokenList);
            if ((right = ParseAndExpr(tokenList)) == null)
            {
                restoreListState(tokenList, restoreStatus);
                Debug.Log("Syntax error : bad AND expr");
                return(null);
            }
            data.token = PromoterParser.eNodeType.AND;
            data.value = tok.c;
            return(new TreeNode <PromoterNodeData>(data, left, right));
        }
        else
        {
            return(left);
        }
    }
コード例 #4
0
ファイル: Parser.cs プロジェクト: afaucher17/Hero.Coli
    /*!
     * \brief Parse a Not expression
     * \param tokenList The list of tokens
     * \return Return the tree corresponding to the expression or null if the parsing fail.
     */
    public TreeNode <PromoterNodeData> ParseNotExpr(LinkedList <PromoterLexer.Token> tokenList)
    {
        PromoterNodeData            data = new PromoterNodeData();
        TreeNode <PromoterNodeData> node = new TreeNode <PromoterNodeData>(data);
        int restoreStatus;

        restoreStatus = getRestoreListStatus();
        if (tokenList.First().token == PromoterLexer.eToken.OP_NOT)
        {
            PromoterLexer.Token tok = tokenList.First();
            popToken(tokenList);
            if ((node = ParseOperandExpr(tokenList)) == null)
            {
                restoreListState(tokenList, restoreStatus);
                Debug.Log("Syntax Error: Bad Not Expr");
                return(null);
            }
            data.token = PromoterParser.eNodeType.NOT;
            data.value = tok.c;
            return(new TreeNode <PromoterNodeData>(data, node));
        }
        return(ParseOperandExpr(tokenList));
    }
コード例 #5
0
ファイル: Parser.cs プロジェクト: afaucher17/Hero.Coli
    /*!
     * \brief Parse a Number expression
     * \param tokenList The list of tokens
     * \return Return the tree corresponding to the expression or null if the parsing fail.
     */
    public TreeNode <PromoterNodeData> ParseNumber(LinkedList <PromoterLexer.Token> tokenList)
    {
        PromoterNodeData data = new PromoterNodeData();
        int    restoreStatus;
        string value = "";

        restoreStatus = getRestoreListStatus();
        if (tokenList.First().token != PromoterLexer.eToken.NUM)
        {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax error : A Number need to begin with a number.");
            return(null);
        }
        value += tokenList.First().c;
        popToken(tokenList);
        while (tokenList.First().token == PromoterLexer.eToken.NUM)
        {
            value += tokenList.First().c;
            popToken(tokenList);
        }
        data.token = PromoterParser.eNodeType.WORD;
        data.value = value;
        return(new TreeNode <PromoterNodeData>(data));
    }
コード例 #6
0
ファイル: Parser.cs プロジェクト: quito/DSynBio_reloaded
    /*!
    \brief Parse a Word expression
    \param tokenList The list of tokens
    \return Return the tree corresponding to the expression or null if the parsing fail.
      */
    public TreeNode<PromoterNodeData> ParseWord(LinkedList<PromoterLexer.Token> tokenList)
    {
        PromoterNodeData data = new PromoterNodeData();
        int restoreStatus;
        string value = "";

        restoreStatus = getRestoreListStatus();
        if (tokenList.First().token != PromoterLexer.eToken.CHAR)
          {
        restoreListState(tokenList, restoreStatus);
        Debug.Log("Syntax error : A word need to begin with a Character.");
        return null;
          }
        value += tokenList.First().c;
        popToken(tokenList);
        while (tokenList.First().token == PromoterLexer.eToken.CHAR || tokenList.First().token == PromoterLexer.eToken.NUM)
          {
        value += tokenList.First().c;
        popToken(tokenList);
          }
        data.token = PromoterParser.eNodeType.WORD;
        data.value = value;
        return new TreeNode<PromoterNodeData>(data);
    }
コード例 #7
0
ファイル: Parser.cs プロジェクト: quito/DSynBio_reloaded
    /*!
    \brief Parse an Or expression
    \param tokenList The list of tokens
    \return Return the tree corresponding to the expression or null if the parsing fail.
       */
    public TreeNode<PromoterNodeData> ParseORExpr(LinkedList<PromoterLexer.Token> tokenList)
    {
        PromoterNodeData data = new PromoterNodeData();
        TreeNode<PromoterNodeData> left = null;
        TreeNode<PromoterNodeData> right = null;
        int restoreStatus;

        restoreStatus = getRestoreListStatus();
        if ((left = ParseAndExpr(tokenList)) == null)
          {
        restoreListState(tokenList, restoreStatus);
        return null;
          }
        if (tokenList.First().token == PromoterLexer.eToken.OP_OR)
          {
        PromoterLexer.Token tok = tokenList.First();
        popToken(tokenList);
        if ((right = ParseORExpr(tokenList)) == null)
          {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax error : bad OR expr");
            return null;
          }
        data.token = PromoterParser.eNodeType.OR;
        data.value = tok.c;
        return new TreeNode<PromoterNodeData>(data, left, right);
          }
        else
          return left;
    }
コード例 #8
0
ファイル: Parser.cs プロジェクト: quito/DSynBio_reloaded
    /*!
    \brief Parse an Operand expression
    \param tokenList The list of tokens
    \return Return the tree corresponding to the expression or null if the parsing fail.
      */
    public TreeNode<PromoterNodeData> ParseOperandExpr(LinkedList<PromoterLexer.Token> tokenList)
    {
        TreeNode<PromoterNodeData> left;
        TreeNode<PromoterNodeData> right;
        PromoterNodeData    data = new PromoterNodeData();
        int restoreStatus;

        restoreStatus = getRestoreListStatus();

        if ((right = ParseBool(tokenList)) != null)
          {
        data.token = PromoterParser.eNodeType.CONSTANT;
        data.value = "C";
        return new TreeNode<PromoterNodeData>(data, null, right);
          }
        if ((left = ParseConstants(tokenList)) == null)
          {
        restoreListState(tokenList, restoreStatus);
        Debug.Log("Syntax error : No constant defined");
        return null;
          }
        if ((right = ParseWord(tokenList)) == null)
          {
        restoreListState(tokenList, restoreStatus);
        Debug.Log("Syntax error : Need name for operand");
        return null;
          }
        data.token = PromoterParser.eNodeType.CONSTANT;
        data.value = "C";
        return new TreeNode<PromoterNodeData>(data, left, right);
    }
コード例 #9
0
ファイル: Parser.cs プロジェクト: quito/DSynBio_reloaded
    /*!
    \brief Parse a Not expression
    \param tokenList The list of tokens
    \return Return the tree corresponding to the expression or null if the parsing fail.
      */
    public TreeNode<PromoterNodeData> ParseNotExpr(LinkedList<PromoterLexer.Token> tokenList)
    {
        PromoterNodeData data = new PromoterNodeData();
        TreeNode<PromoterNodeData> node = new TreeNode<PromoterNodeData>(data);
        int restoreStatus;

        restoreStatus = getRestoreListStatus();
        if (tokenList.First().token == PromoterLexer.eToken.OP_NOT)
          {
        PromoterLexer.Token tok = tokenList.First();
        popToken(tokenList);
        if ((node = ParseOperandExpr(tokenList)) == null)
          {
            restoreListState(tokenList, restoreStatus);
            Debug.Log("Syntax Error: Bad Not Expr");
            return null;
          }
        data.token = PromoterParser.eNodeType.NOT;
        data.value = tok.c;
        return new TreeNode<PromoterNodeData>(data, node);
          }
        return ParseOperandExpr(tokenList);
    }