Esempio n. 1
0
        public Node Simple()
        {
            switch (CurrentToken)
            {
            case TokenCategory.LITERAL: {
                NLiteral nLiteral = new NLiteral();
                nLiteral.AnchorToken = Expect(TokenCategory.LITERAL);
                return(nLiteral);
            }

            case TokenCategory.ASTERISK: {
                NDuplicate nDuplicate = new NDuplicate();
                nDuplicate.AnchorToken = Expect(TokenCategory.ASTERISK);
                nDuplicate.Add(Simple());
                return(nDuplicate);
            }

            case TokenCategory.SQUARE_BRACKET_LEFT: {
                NSummation nSummation = new NSummation();
                nSummation.AnchorToken = Expect(TokenCategory.SQUARE_BRACKET_LEFT);
                MaxList(nSummation);
                Expect(TokenCategory.SQUARE_BRACKET_RIGHT);
                if (nSummation.children.Count == 1)
                {
                    return(nSummation[0]);
                }
                return(nSummation);
            }

            default: {
                Console.WriteLine(CurrentToken);
                throw new Exception("This code should never be reached.");
            }
            }
        }
Esempio n. 2
0
        public string Visit(NSummation nSummation)
        {
            string retVal = Visit((dynamic)nSummation[0]);

            for (int i = 1; i < nSummation.children.Count; ++i)
            {
                retVal += Visit((dynamic)nSummation[i]);
                retVal += "\t\tadd\n";
            }
            return(retVal);
        }