private static Parser <SyntaxToken, JassTypeSyntax> GetReferenceTypeParser() { return(OneOf( Keyword(SyntaxTokenType.HandleKeyword).ThenReturn(JassTypeSyntax.Handle), IdentifierNameParser.Map(id => new JassTypeSyntax(id.Name))) .Labelled("reference type")); }
private static Parser <SyntaxToken, IExpressionSyntax> GetArrayReferenceExpressionParser(Parser <SyntaxToken, IExpressionSyntax> expressionParser) { return(Try(IdentifierNameParser .Before(Token(SyntaxTokenType.SquareBracketOpenSymbol))) .Then(expressionParser, (id, indexer) => (IExpressionSyntax) new JassArrayReferenceExpressionSyntax(id, indexer)) .Before(Token(SyntaxTokenType.SquareBracketCloseSymbol)) .Labelled("array reference")); }
private static Parser <char, IExpressionSyntax> GetArrayReferenceExpressionParser(Parser <char, IExpressionSyntax> expressionParser) { return(Try(IdentifierNameParser .Before(Char('[').SkipWhitespaces())) .Then(expressionParser, (id, indexer) => (IExpressionSyntax) new JassArrayReferenceExpressionSyntax(id, indexer)) .Before(Char(']').SkipWhitespaces()) .Labelled("array reference")); }
private static Parser <char, JassFunctionDeclarationSyntax> GetFunctionDeclarationParser() { return(Map( (id, parameterList, returnType) => new JassFunctionDeclarationSyntax(id, parameterList, returnType), IdentifierNameParser.Before(Keyword("takes")), Keyword("nothing").ThenReturn(JassParameterListSyntax.Empty).Or(ParameterListParser), Keyword("returns").Then(Keyword("nothing", JassTypeSyntax.Nothing).Or(TypeParser))) .Labelled("function declaration")); }
private static Parser <char, JassTypeSyntax> GetTypeParser() { return(OneOf( Keyword("code").ThenReturn(JassTypeSyntax.Code), Keyword("handle").ThenReturn(JassTypeSyntax.Handle), Keyword("integer").ThenReturn(JassTypeSyntax.Integer), Keyword("real").ThenReturn(JassTypeSyntax.Real), Keyword("boolean").ThenReturn(JassTypeSyntax.Boolean), Keyword("string").ThenReturn(JassTypeSyntax.String), IdentifierNameParser.Map(id => new JassTypeSyntax(id.Name))) .Labelled("type")); }
private static Parser <SyntaxToken, JassTypeSyntax> GetTypeParser() { return(OneOf( Keyword(SyntaxTokenType.CodeKeyword).ThenReturn(JassTypeSyntax.Code), Keyword(SyntaxTokenType.HandleKeyword).ThenReturn(JassTypeSyntax.Handle), Keyword(SyntaxTokenType.IntegerKeyword).ThenReturn(JassTypeSyntax.Integer), Keyword(SyntaxTokenType.RealKeyword).ThenReturn(JassTypeSyntax.Real), Keyword(SyntaxTokenType.BooleanKeyword).ThenReturn(JassTypeSyntax.Boolean), Keyword(SyntaxTokenType.StringKeyword).ThenReturn(JassTypeSyntax.String), IdentifierNameParser.Map(id => new JassTypeSyntax(id.Name))) .Labelled("type")); }
private static Parser <SyntaxToken, IExpressionSyntax> GetInvocationExpressionParser(Parser <SyntaxToken, IExpressionSyntax> expressionParser) { return(Try(IdentifierNameParser.Before(Token(SyntaxTokenType.ParenthesisOpenSymbol))) .Then(GetArgumentListParser(expressionParser).Before(Token(SyntaxTokenType.ParenthesisCloseSymbol)), (id, arguments) => (IExpressionSyntax) new JassInvocationExpressionSyntax(id, arguments)) .Labelled("invocation expression")); }
private static Parser <SyntaxToken, IExpressionSyntax> GetVariableReferenceExpressionParser() { return(IdentifierNameParser .Select <IExpressionSyntax>(name => new JassVariableReferenceExpressionSyntax(name)) .Labelled("variable reference")); }
private static Parser <char, IExpressionSyntax> GetInvocationExpressionParser(Parser <char, IExpressionSyntax> expressionParser) { return(Try(IdentifierNameParser.Before(Char('(').SkipWhitespaces())) .Then(GetArgumentListParser(expressionParser).Before(Char(')')), (id, arguments) => (IExpressionSyntax) new JassInvocationExpressionSyntax(id, arguments)) .Labelled("invocation expression")); }