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