public override bool Parse(ParseContext context, IAstNode parent) { TokenStream <RToken> tokens = context.Tokens; Debug.Assert(tokens.CurrentToken.TokenType == RTokenType.OpenSquareBracket || tokens.CurrentToken.TokenType == RTokenType.OpenDoubleSquareBracket); this.LeftBrackets = RParser.ParseToken(context, this); RTokenType terminatingTokenType = RParser.GetTerminatingTokenType(this.LeftBrackets.Token.TokenType); this.Arguments = new ArgumentList(terminatingTokenType); this.Arguments.Parse(context, this); if (tokens.CurrentToken.TokenType == terminatingTokenType) { this.RightBrackets = RParser.ParseToken(context, this); return(base.Parse(context, parent)); } else { context.AddError(new MissingItemParseError(ParseErrorType.CloseSquareBracketExpected, tokens.PreviousToken)); } return(true); }
private RTokenType GetMatchingBraceToken(RTokenType tokenType) { switch (tokenType) { case RTokenType.OpenBrace: return(RTokenType.CloseBrace); case RTokenType.CloseBrace: return(RTokenType.OpenBrace); case RTokenType.OpenSquareBracket: return(RTokenType.CloseSquareBracket); case RTokenType.CloseSquareBracket: return(RTokenType.OpenSquareBracket); case RTokenType.OpenDoubleSquareBracket: return(RTokenType.CloseDoubleSquareBracket); case RTokenType.CloseDoubleSquareBracket: return(RTokenType.OpenDoubleSquareBracket); } Debug.Assert(false, "Unknown brace token"); return(RTokenType.Unknown); }
private void AddToken(RTokenType type, RTokenSubType subType, int start, int length) { var token = new RToken(type, start, length); token.SubType = subType; _tokens.Add(token); }
private void AddWord(RTokenType type) { SkipWhitespace(); var start = _cs.Position; SkipWord(); if (_cs.Position > start) { AddToken(type, start, _cs.Position - start); } }
private static bool IsOpenBraceToken(RTokenType tokenType) { switch (tokenType) { case RTokenType.OpenBrace: case RTokenType.OpenCurlyBrace: case RTokenType.OpenSquareBracket: case RTokenType.OpenDoubleSquareBracket: return(true); } return(false); }
public static bool IsListTerminator(ParseContext context, RTokenType openingTokenType, RToken token) { RTokenType tokenType = token.TokenType; if (tokenType == RTokenType.CloseCurlyBrace || tokenType == RTokenType.Semicolon) { return(true); } switch (openingTokenType) { case RTokenType.OpenBrace: if (tokenType == RTokenType.CloseSquareBracket || tokenType == RTokenType.CloseDoubleSquareBracket) { return(true); } break; case RTokenType.OpenSquareBracket: if (tokenType == RTokenType.CloseBrace || tokenType == RTokenType.CloseDoubleSquareBracket) { return(true); } break; case RTokenType.OpenDoubleSquareBracket: if (tokenType == RTokenType.CloseBrace || tokenType == RTokenType.CloseSquareBracket) { return(true); } break; } if (tokenType == RTokenType.Operator && token.IsKeywordText(context.TextProvider, "<-")) { return(true); } if (tokenType == RTokenType.Keyword && !token.IsKeywordText(context.TextProvider, "if") && !token.IsKeywordText(context.TextProvider, "function")) { return(true); } return(false); }
public static RTokenType GetOpeningTokenType(RTokenType closingTokenType) { switch (closingTokenType) { case RTokenType.CloseBrace: return(RTokenType.OpenBrace); case RTokenType.CloseSquareBracket: return(RTokenType.OpenSquareBracket); case RTokenType.CloseDoubleSquareBracket: return(RTokenType.OpenDoubleSquareBracket); case RTokenType.CloseCurlyBrace: return(RTokenType.OpenCurlyBrace); } return(RTokenType.Unknown); }
public static RTokenType GetTerminatingTokenType(RTokenType openingTokenType) { switch (openingTokenType) { case RTokenType.OpenSquareBracket: return RTokenType.CloseSquareBracket; case RTokenType.OpenDoubleSquareBracket: return RTokenType.CloseDoubleSquareBracket; case RTokenType.OpenCurlyBrace: return RTokenType.CloseCurlyBrace; case RTokenType.OpenBrace: return RTokenType.CloseBrace; default: Debug.Assert(false, "Unable to determine closing token type"); break; } return RTokenType.Unknown; }
public static RTokenType GetTerminatingTokenType(RTokenType openingTokenType) { switch (openingTokenType) { case RTokenType.OpenSquareBracket: return(RTokenType.CloseSquareBracket); case RTokenType.OpenDoubleSquareBracket: return(RTokenType.CloseDoubleSquareBracket); case RTokenType.OpenCurlyBrace: return(RTokenType.CloseCurlyBrace); case RTokenType.OpenBrace: return(RTokenType.CloseBrace); default: Debug.Assert(false, "Unable to determine closing token type"); break; } return(RTokenType.Unknown); }
public static RTokenType GetOpeningTokenType(RTokenType closingTokenType) { switch (closingTokenType) { case RTokenType.CloseBrace: return RTokenType.OpenBrace; case RTokenType.CloseSquareBracket: return RTokenType.OpenSquareBracket; case RTokenType.CloseDoubleSquareBracket: return RTokenType.OpenDoubleSquareBracket; case RTokenType.CloseCurlyBrace: return RTokenType.OpenCurlyBrace; } return RTokenType.Unknown; }
private void AddToken(RTokenType type, int start, int length) { var token = new RToken(type, start, length); _tokens.Add(token); }
public CommaSeparatedList(RTokenType terminatingTokenType) { _terminatingTokenType = terminatingTokenType; }
public ArgumentList(RTokenType terminatingTokenType) : base(terminatingTokenType) { }
private void AddToken(RTokenType type, int start, int length) => _tokens.Add(new RToken(type, start, length));
public static bool IsListTerminator(ParseContext context, RTokenType openingTokenType, RToken token) { RTokenType tokenType = token.TokenType; if (tokenType == RTokenType.CloseCurlyBrace || tokenType == RTokenType.Semicolon) { return true; } switch (openingTokenType) { case RTokenType.OpenBrace: if (tokenType == RTokenType.CloseSquareBracket || tokenType == RTokenType.CloseDoubleSquareBracket) { return true; } break; case RTokenType.OpenSquareBracket: if (tokenType == RTokenType.CloseBrace || tokenType == RTokenType.CloseDoubleSquareBracket) { return true; } break; case RTokenType.OpenDoubleSquareBracket: if (tokenType == RTokenType.CloseBrace || tokenType == RTokenType.CloseSquareBracket) { return true; } break; } if (tokenType == RTokenType.Operator && token.IsKeywordText(context.TextProvider, "<-")) { return true; } if (tokenType == RTokenType.Keyword && !token.IsKeywordText(context.TextProvider, "if") && !token.IsKeywordText(context.TextProvider, "function")) { return true; } return false; }
private RTokenType GetMatchingBraceToken(RTokenType tokenType) { switch (tokenType) { case RTokenType.OpenBrace: return RTokenType.CloseBrace; case RTokenType.CloseBrace: return RTokenType.OpenBrace; case RTokenType.OpenSquareBracket: return RTokenType.CloseSquareBracket; case RTokenType.CloseSquareBracket: return RTokenType.OpenSquareBracket; case RTokenType.OpenDoubleSquareBracket: return RTokenType.CloseDoubleSquareBracket; case RTokenType.CloseDoubleSquareBracket: return RTokenType.OpenDoubleSquareBracket; } Debug.Assert(false, "Unknown brace token"); return RTokenType.Unknown; }
private static bool IsOpenBraceToken(RTokenType tokenType) { switch (tokenType) { case RTokenType.OpenBrace: case RTokenType.OpenCurlyBrace: case RTokenType.OpenSquareBracket: case RTokenType.OpenDoubleSquareBracket: return true; } return false; }