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."); } } }
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); }