Exemple #1
0
        public static Either<ParseException, Pair<List<IToken>, PrimaryNode>> Parse(List<IToken> tokens, IScopedTable<IEntityType, string> parentTypeTable)
        {
            IToken token = null;
            Console.WriteLine("PrimaryNode");
            if (tokens.Count < 1)
                return NotAPrimaryException;
            if ((tokens[0] is IntegerLiteralToken) || (tokens[0] is RealLiteralToken) ||
                (tokens[0] is TrueKeywordToken) || (tokens[0] is FalseKeywordToken))
            {
                token = tokens[0];
                tokens = tokens.Skip(1).ToList();
                while (tokens.Count > 0)
                    if (tokens[0] is NewLineSymbolToken || tokens[0] is CommentToken)
                        tokens = tokens.Skip(1).ToList();
                    else break;
                return new Pair<List<IToken>, PrimaryNode>(tokens, new PrimaryNode(token, parentTypeTable));
            }

            var maybeModifiablePrimary = ModifiablePrimaryNode.Parse(tokens, parentTypeTable);
            if (maybeModifiablePrimary.IsLeft)
                return maybeModifiablePrimary.LeftToList()[0];
            var modifiablePrimary = maybeModifiablePrimary.RightToList()[0].Second;
            tokens = maybeModifiablePrimary.RightToList()[0].First;
            return new Pair<List<IToken>, PrimaryNode>(tokens, new PrimaryNode(token, modifiablePrimary, parentTypeTable));
        }
Exemple #2
0
 private PrimaryNode(IToken token, ModifiablePrimaryNode modifiablePrimary, IScopedTable<IEntityType, string> parentTypeTable)
 {
     Token = token;
     ModifiablePrimary = modifiablePrimary;
     ParentTypeTable = parentTypeTable;
 }