public override int ConvertTokens(IEnumerable <RPToken> tokens) { string regex = tokens.First().Value; if (!Options.ContainsKey(typeof(RPScanTypes).Name)) { throw new Exception("ScanTypes not defined."); } if (!Enum.TryParse(Options[typeof(RPScanTypes).Name], true, out RPScanTypes scanType)) { throw new Exception("Invalid ScanType"); } Element = new RPRegexElement(RPRegexFactory.Create(regex), scanType); return(base.ConvertTokens(tokens.Skip(1)) + 1); }
public override int ConvertTokens(IEnumerable <RPToken> tokens) { if (Element == null || !(Element is RPSyntaxKindElement syntaxKindElement)) { throw new Exception("An RPSyntaxKindRegexPairTokenType must be preceeded by an RPSyntaxKindTokenType."); } RPToken token = tokens.ElementAtOrDefault(1); if (token == null || !(token.TokenType == typeof(RPRegexTokenType))) { throw new Exception("The RPSyntaxKindRegexPairTokenType must be followed by an RPRegexTokenType."); } string regex = token.Value; Element = new RPSyntaxKindRegexPairElement(syntaxKindElement.SyntaxKind, RPRegexFactory.Create(regex), syntaxKindElement.ScanType); return(base.ConvertTokens(tokens.Skip(2)) + 2); }