public void WhitespaceTerminalGetIntervalsShouldReturnAllWhitespaceRanges()
        {
            var whitespaceTerminal = new WhitespaceTerminal();
            var intervals          = whitespaceTerminal.GetIntervals();

            Assert.AreEqual(9, intervals.Count);
        }
Exemple #2
0
        private static BaseLexerRule CreateWhitespaceLexerRule()
        {
            var whitespaceTerminal   = new WhitespaceTerminal();
            var startState           = new DfaState();
            var finalState           = new DfaState(true);
            var whitespaceTransition = new DfaTransition(whitespaceTerminal, finalState);

            startState.AddTransition(whitespaceTransition);
            finalState.AddTransition(whitespaceTransition);
            return(new DfaLexerRule(startState, new TokenType("[\\s]+")));
        }
Exemple #3
0
        private static BaseLexerRule Whitespace()
        {
            var whitespaceTerminal = new WhitespaceTerminal();
            var startWhitespace    = new DfaState();
            var finalWhitespace    = new DfaState(true);

            startWhitespace.AddTransition(new DfaTransition(whitespaceTerminal, finalWhitespace));
            finalWhitespace.AddTransition(new DfaTransition(whitespaceTerminal, finalWhitespace));
            var whitespace = new DfaLexerRule(startWhitespace, TokenTypes.Whitespace);

            return(whitespace);
        }
Exemple #4
0
        private static ITerminal CreateTerminalForCharacter(char value, bool isEscaped, bool negate)
        {
            ITerminal terminal = null;

            if (!isEscaped)
            {
                terminal = new CharacterTerminal(value);
            }
            else
            {
                switch (value)
                {
                case 's':
                    terminal = new WhitespaceTerminal();
                    break;

                case 'd':
                    terminal = new DigitTerminal();
                    break;

                case 'w':
                    terminal = new WordTerminal();
                    break;

                case 'D':
                    terminal = new DigitTerminal();
                    negate   = !negate;
                    break;

                case 'S':
                    terminal = new WhitespaceTerminal();
                    negate   = !negate;
                    break;

                case 'W':
                    terminal = new WordTerminal();
                    negate   = !negate;
                    break;

                default:
                    terminal = new CharacterTerminal(value);
                    break;
                }
            }

            if (negate)
            {
                terminal = new NegationTerminal(terminal);
            }
            return(terminal);
        }
        public void WhitespaceShouldMatchSpaceCharacter()
        {
            var whitespaceTerminal = new WhitespaceTerminal();

            Assert.IsTrue(whitespaceTerminal.IsMatch(' '));
        }
        public void WhitespaceTerminalShouldMatchLineFeed()
        {
            var whitespaceTerminal = new WhitespaceTerminal();

            Assert.IsTrue(whitespaceTerminal.IsMatch('\n'));
        }
        public void WhitespaceTerminalShouldMatchNewLineCharacter()
        {
            var whitespaceTerminal = new WhitespaceTerminal();

            Assert.IsTrue(whitespaceTerminal.IsMatch('\r'));
        }
        private static INfa Character(RegexCharacterClassCharacter character, bool negate)
        {
            var start = new NfaState();
            var end   = new NfaState();

            ITerminal terminal = null;

            if (!character.IsEscaped)
            {
                terminal = new CharacterTerminal(character.Value);
            }
            else
            {
                switch (character.Value)
                {
                case 's':
                    terminal = new WhitespaceTerminal();
                    break;

                case 'd':
                    terminal = new DigitTerminal();
                    break;

                case 'w':
                    terminal = new WordTerminal();
                    break;

                case 'D':
                    terminal = new DigitTerminal();
                    negate   = !negate;
                    break;

                case 'S':
                    terminal = new WhitespaceTerminal();
                    negate   = !negate;
                    break;

                case 'W':
                    terminal = new WordTerminal();
                    negate   = !negate;
                    break;

                default:
                    terminal = new CharacterTerminal(character.Value);
                    break;
                }
            }

            if (negate)
            {
                terminal = new NegationTerminal(terminal);
            }

            var transition = new TerminalNfaTransition(
                terminal: terminal,
                target: end);

            start.AddTransistion(transition);

            return(new Nfa(start, end));
        }