Ejemplo n.º 1
0
    /*!
     * \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);
        }
    }
Ejemplo n.º 2
0
 /*!
  * \brief Restore last token that were poped in the given list
  * \param list The list where to restore token
  */
 public void           restoreToken(LinkedList <PromoterLexer.Token> list)
 {
     PromoterLexer.Token tok = _restoreList.First();
     _restoreList.RemoveFirst();
     list.AddFirst(tok);
     _restoreStatus -= 1;
 }
Ejemplo n.º 3
0
    /*!
     * \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));
    }