/*! * \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); } }
/*! * \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; }
/*! * \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)); }