private SyntaxNode ReadFunction(Token nameToken) { nameToken.AssertIsTypeOf(TokenType.Identifier); tokens.AssertCanRead(); tokens.AssertNextIsTypeOf(TokenType.LeftParentheses); SyntaxNode functionExpression = ReadExpression(); tokens.AssertCanRead(); tokens.AssertNextIsTypeOf(TokenType.RightParentheses); return(new FunctionOrDistributionNode(new IdentifierNode(nameToken), functionExpression)); }
private SyntaxNode HandleFormalIdentifierAmbiguity() { tokens.AssertCanRead(); Token identifer = tokens.Next(); identifer.AssertIsTypeOf(TokenType.Identifier); if (IdentifierIsAFunction()) { return(ReadFunction(identifer)); } return(new IdentifierNode(identifer)); }