Beispiel #1
0
        public static Either <ParseException, Pair <List <IToken>, AssignmentNode> > Parse(List <IToken> tokens, IScopedTable <IEntityType, string> parentTypeTable)
        {
            Console.WriteLine("AssignmentNode");
            var maybeModifiablePrimary = ModifiablePrimaryNode.Parse(tokens, parentTypeTable);

            if (maybeModifiablePrimary.IsLeft)
            {
                return(maybeModifiablePrimary.LeftToList()[0]);
            }
            tokens = maybeModifiablePrimary.RightToList()[0].First;

            if (tokens.Count < 1)
            {
                return(NotAnAssignmentNodeException);
            }

            if (!(tokens[0] is AssignmentOperatorToken))
            {
                return(NotAnAssignmentNodeException);
            }
            tokens = tokens.Skip(1).ToList();

            var maybeExpression = ExpressionNode.Parse(tokens, parentTypeTable);

            if (maybeExpression.IsLeft)
            {
                return(maybeExpression.LeftToList()[0]);
            }
            tokens = maybeExpression.RightToList()[0].First;

            while (tokens.Count > 0)
            {
                if (tokens[0] is NewLineSymbolToken || tokens[0] is CommentToken ||
                    tokens[0] is SemicolonSymbolToken)
                {
                    tokens = tokens.Skip(1).ToList();
                }
                else
                {
                    break;
                }
            }

            return(new Pair <List <IToken>, AssignmentNode>(tokens, new AssignmentNode(
                                                                maybeModifiablePrimary.RightToList()[0].Second, maybeExpression.RightToList()[0].Second)));
        }
Beispiel #2
0
 private AssignmentNode(ModifiablePrimaryNode modPrimary, ExpressionNode expression)
 {
     ModifiablePrimary = modPrimary;
     Expression        = expression;
 }