Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }