protected virtual IAcceptInputTransition <T> ActivateRegexNFATransitionFromRegexRange(RegexRange <T> regex)
        {
            if (regex == null)
            {
                throw new ArgumentNullException(nameof(regex));
            }

            return(new BasicRegexFATransition <T>(regex.Condition));
        }
        protected override IAcceptInputTransition <T> ActivateRegexNFATransitionFromRegexRange(RegexRange <T> regex)
        {
            if (regex == null)
            {
                throw new ArgumentNullException(nameof(regex));
            }

            if (this.AccreditedSet.Any(t => regex.Condition(t)))
            {
                return(BasicRegexFATransition <T> .Adapt(new RangeSetRegexFATransition <T, BasicRegexNFAState <T> >(new RangeSet <T>(new[] { (IRange <T>)regex }, this.rangeSet.RangeInfo))));
            }
            else
            {
                return(new BasicRegexFATransition <T>(t => false));
            }
        }
示例#3
0
        protected override IAcceptInputTransition <T> ActivateRegexNFATransitionFromRegexRange(RegexRange <T> regex)
        {
            if (regex == null)
            {
                throw new ArgumentNullException(nameof(regex));
            }

            var result = this.DynamicInvokeShunt(BasicRegexStateMachineActivationContextInfo <T> .ActivateRegexNFATransitionFromRegexRangeSource, regex);

            if (result.Success)
            {
                return((IAcceptInputTransition <T>)result.ReturnValue);
            }
            else
            {
                if (this.AccreditedSet.Any(t => regex.Condition(t)))
                {
                    return(new RangeSetRegexFATransition <T, BasicRegexNFAState <T> >(new RangeSet <T>(new[] { (IRange <T>)regex }, this.rangeInfo)));
                }
                else
                {
                    return(new BasicRegexFATransition <T, BasicRegexNFAState <T> >(t => false));
                }
            }
        }
 public RangeDebugView(RegexRange <T> regex)
 {
     this.regex = regex;
 }
示例#5
0
        private void _epasaRegexButton_Click(object sender, EventArgs e)
        {
            try {
                //var unescapedSafeAnsiCharPattern =
                //	RegexPattern.With.Set(RegexPattern.With.Literal(SafeUnescapedAnsiCharSet));

                var unescapedSafeAnsiCharPatterns = SafeUnescapedAnsiCharSet
                                                    .Select(c => RegexPattern.With.Literal(c.ToString()));

                var escapedSafeAnsiCharPatterns = SafeEscapedAnsiCharSet
                                                  .Select(c => RegexPattern.With.Literal("\\").Literal(c.ToString()));

                var safeAnsiCharPattern = RegexPattern.With.Choice.EitherAny(
                    unescapedSafeAnsiCharPatterns.Concat(escapedSafeAnsiCharPatterns).ToArray()
                    );


                var safeAnsiStringPattern = new RegexPattern(safeAnsiCharPattern)
                                            .Repeat.OneOrMore;

                var pascal64StartPattern = RegexPattern.With
                                           .Set(RegexPattern.With.Literal(Pascal64StartCharSet, true));

                // account name needs to omit brackets!

                var pascal64StringPattern =
                    new RegexPattern(pascal64StartPattern)
                    .Set(RegexPattern.With.Literal(Pascal64CharSet, true)).Repeat.InRange(2, 63);


                var hexNibblePattern = RegexPattern.With
                                       .Set(RegexRange.OfMany(Tuple.Create('0', '9'), Tuple.Create('a', 'f')));

                var hexBytePattern = RegexPattern.With
                                     .Group(
                    new RegexPattern(hexNibblePattern).Repeat.Exactly(2)
                    );

                var hexStringPattern = new RegexPattern(hexBytePattern).Repeat.OneOrMore;

                var base58CharPattern = RegexPattern.With
                                        .Set(RegexPattern.With.Literal(Base58CharSet));

                var base58StringPattern = new RegexPattern(base58CharPattern).Repeat.OneOrMore;

                var integerPattern = RegexPattern
                                     .With.Digit.Repeat.OneOrMore;

                var accountNamePattern = RegexPattern
                                         .With.NamedGroup("AccountName", pascal64StringPattern);


                var accountNumberPattern = RegexPattern
                                           .With.NamedGroup("AccountNumber", integerPattern)
                                           .Literal("-")
                                           .NamedGroup("Checksum", RegexPattern.With.Digit.Repeat.Exactly(2));

                var pasaPattern = RegexPattern
                                  .With.Choice.Either(accountNamePattern, accountNumberPattern);

                var payloadPattern = RegexPattern.With
                                     .Choice.EitherAny(
                    RegexPattern.With.NamedGroup("ASCIIPayload", RegexPattern.With.Literal("\"").Group(safeAnsiStringPattern).Literal("\"")).Repeat.Optional,
                    RegexPattern.With.NamedGroup("HexPayload", RegexPattern.With.Literal("0x").Group(hexStringPattern)).Repeat.Optional,
                    RegexPattern.With.NamedGroup("Base58Payload", base58StringPattern).Repeat.Optional
                    );

                var publicPayloadPattern = RegexPattern.With
                                           .Literal("[")
                                           .NamedGroup("NoEncryption", payloadPattern).Repeat.Optional
                                           .Literal("]", true);

                var receiverPayloadPattern = RegexPattern.With
                                             .Literal("(")
                                             .NamedGroup("ReceiverEncrypted", payloadPattern).Repeat.Optional
                                             .Literal(")");

                var senderPayloadPattern = RegexPattern.With
                                           .Literal("<")
                                           .NamedGroup("SenderEncrypted", payloadPattern).Repeat.Optional
                                           .Literal(">");

                var aesPayloadPattern = RegexPattern.With
                                        .Literal("<")
                                        .NamedGroup("AESEncrypted", payloadPattern).Repeat.Optional
                                        .Literal(">")
                                        .Literal(":")
                                        .NamedGroup("Password", safeAnsiStringPattern);

                var extendedAddressPattern = RegexPattern.With
                                             .Choice.EitherAny(
                    publicPayloadPattern,
                    receiverPayloadPattern,
                    senderPayloadPattern,
                    aesPayloadPattern
                    );

                var epasaChecksumPattern = new RegexPattern(hexBytePattern)
                                           .Repeat.Exactly(2);

                var epasaPattern = RegexPattern
                                   .With.AtBeginning
                                   .NamedGroup("PASA", pasaPattern)
                                   .RegEx(new RegexPattern(extendedAddressPattern)).Repeat.Optional
                                   .Group(
                    RegexPattern.With
                    .Literal(":")
                    .NamedGroup("EPASAChecksum", epasaChecksumPattern)
                    .AtEnd
                    ).Repeat.Optional;


                _standardTextBox.Clear();
                _standardTextBox.AppendText(epasaPattern.ToString());

                Match subregex;
                {
                    //subregex = new Regex(unescapedSafeAnsiCharPattern, RegexOptions.None).Match("77-44[0x1234]:121f");
                    _standardTextBox.AppendLine("const string safeAnsiCharPattern = \"" + safeAnsiCharPattern + "\"");
                    _standardTextBox.AppendLine("const string safeAnsiStringPattern = \"" + safeAnsiStringPattern + "\"");
                    _standardTextBox.AppendLine("const string pascal64StartPattern = \"" + pascal64StartPattern + "\"");
                    _standardTextBox.AppendLine("const string pascal64StringPattern = \"" + pascal64StringPattern + "\"");
                    _standardTextBox.AppendLine("const string hexNibblePattern = \"" + hexNibblePattern + "\"");
                    _standardTextBox.AppendLine("const string hexBytePattern = \"" + hexBytePattern + "\"");
                    _standardTextBox.AppendLine("const string hexStringPattern = \"" + hexStringPattern + "\"");
                    _standardTextBox.AppendLine("const string base58CharPattern = \"" + base58CharPattern + "\"");
                    _standardTextBox.AppendLine("const string base58StringPattern = \"" + base58StringPattern + "\"");
                    _standardTextBox.AppendLine("const string integerPattern = \"" + integerPattern + "\"");
                    _standardTextBox.AppendLine("const string accountNamePattern = \"" + accountNamePattern + "\"");
                    _standardTextBox.AppendLine("const string accountNumberPattern = \"" + accountNumberPattern + "\"");
                    _standardTextBox.AppendLine("const string pasaPattern = \"" + pasaPattern + "\"");
                    _standardTextBox.AppendLine("const string payloadPattern = \"" + payloadPattern + "\"");
                    _standardTextBox.AppendLine("const string publicPayloadPattern = \"" + publicPayloadPattern + "\"");
                    _standardTextBox.AppendLine("const string receiverPayloadPattern = \"" + receiverPayloadPattern + "\"");
                    _standardTextBox.AppendLine("const string senderPayloadPattern = \"" + senderPayloadPattern + "\"");
                    _standardTextBox.AppendLine("const string aesPayloadPattern = \"" + aesPayloadPattern + "\"");
                    _standardTextBox.AppendLine("const string extendedAddressPattern = \"" + extendedAddressPattern + "\"");
                    _standardTextBox.AppendLine("const string epasaChecksumPattern = \"" + epasaChecksumPattern + "\"");
                    _standardTextBox.AppendLine("const string epasaPattern = \"" + epasaPattern + "\"");
                }

                _standardTextBox.AppendLine("");



                var regex = new Regex(epasaPattern, RegexOptions.None);

                var result = regex.Match("77-44[0x123]:121f");
                result = regex.Match("77-44[0x123]");
                result = regex.Match("77-44[B58xdf]:121f");
                result = regex.Match("77-44");
                result = regex.Match("account-name");
                result = regex.Match("account-name:abcd");
                _standardTextBox.AppendLine(result.ToString());
            } catch (Exception error) {
                ExceptionDialog.Show(this, error);
            }
        }