public static LinkedListNode <Lexeme> TryParse(LinkedListNode <Lexeme> lexemes, out Expr resultNode) { resultNode = null; var nextLexeme = UnaryExpr.TryParse(lexemes, out UnaryExpr pre); if (pre != null) { resultNode = pre; return(nextLexeme); } nextLexeme = ArrayInitializer.TryParse(nextLexeme, out ArrayInitializer arrInit); if (arrInit != null) { resultNode = arrInit; return(nextLexeme); } nextLexeme = Literal.TryParse(lexemes, out Literal lit); if (lit != null) { resultNode = lit; return(nextLexeme); } nextLexeme = TryParseNoLit(lexemes, out Expr nolit); if (nolit != null) { resultNode = nolit; return(nextLexeme); } return(lexemes); }
public static LinkedListNode <Lexeme> TryParse(LinkedListNode <Lexeme> lexemes, out UnaryExpr resultNode) { resultNode = null; if (lexemes.Value.Type != LT.OP_NEG && lexemes.Value.Type != LT.OP_SUB) { return(lexemes); } UnaryOp op = lexemes.Value.Type == LT.OP_SUB ? UnaryOp.MIN : UnaryOp.NEG; var nextLexeme = nodes.Expr.TryParse(lexemes.Next, out var datum); if (datum == null) { return(lexemes); } resultNode = new UnaryExpr { Op = op, Token = lexemes.Value, Expr = datum }; return(nextLexeme); }