コード例 #1
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_article_specially_crafted_regex(self, n=100):
     self.assertEqual((0, n), pyrex.rex('a?' * n + 'a' * n).match('a' * n))
コード例 #2
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_would_never_end(self):
     self.assertEqual(None, pyrex.rex('(.+.+)+y').match('a' * 29))
コード例 #3
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_will_match_greedly(self):
     self.assertEqual((0, 30), pyrex.rex('(.+.+)+y').match('a' * 29 + 'y'))
コード例 #4
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_will_match_zero_width_string(self):
     self.assertEqual(None, pyrex.rex('a*').match(''))
     self.assertEqual(None, pyrex.rex('a*').match('b'))
コード例 #5
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_options_simple(self):
     self.assertEqual((0, 2), pyrex.rex('ab|aa').match('aab'))
コード例 #6
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_double_literal(self):
     self.assertEqual((0, 2), pyrex.rex('aa').match('aa'))
コード例 #7
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_simple_repetition(self):
     self.assertEqual((0, 2), pyrex.rex('a+').match('aa'))
コード例 #8
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_single_literal(self):
     self.assertEqual((0, 1), pyrex.rex('a').match('a'))
コード例 #9
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_options_simple(self):
     self.assertEqual((0, 2), pyrex.rex('ab|aa').match('aab'))
コード例 #10
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_will_match_zero_width_string(self):
     self.assertEqual(None, pyrex.rex('a*').match(''))
     self.assertEqual(None, pyrex.rex('a*').match('b'))
コード例 #11
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_simple_repetition_zero_or_one(self):
     self.assertEqual((0, 2), pyrex.rex('aa?').match('aa'))
コード例 #12
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_simple_repetition_with_optional(self):
     self.assertEqual((0, 2), pyrex.rex('a+?').match('aa'))
コード例 #13
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_simple_repetition(self):
     self.assertEqual((0, 2), pyrex.rex('a+').match('aa'))
コード例 #14
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_double_literal_matching_multiple_times(self):
     self.assertEqual((0, 2), pyrex.rex('aa').match('aaaa'))
コード例 #15
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_double_literal(self):
     self.assertEqual((0, 2), pyrex.rex('aa').match('aa'))
コード例 #16
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_grouping_simple(self):
     self.assertEqual((0, 5), pyrex.rex('a(ab)+').match('aabab'))
コード例 #17
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_single_literal_in_the_middle(self):
     self.assertEqual((1, 2), pyrex.rex('a').match('ba'))
コード例 #18
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_would_never_end(self):
     self.assertEqual(None, pyrex.rex('(.+.+)+y').match('a'*29))
コード例 #19
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_double_literal_matching_multiple_times(self):
     self.assertEqual((0, 2), pyrex.rex('aa').match('aaaa'))
コード例 #20
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_will_match_greedly(self):
     self.assertEqual((0, 30), pyrex.rex('(.+.+)+y').match('a'*29+'y'))
コード例 #21
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_simple_repetition_with_optional(self):
     self.assertEqual((0, 2), pyrex.rex('a+?').match('aa'))
コード例 #22
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_will_match_greedly_in_the_middle(self):
     self.assertEqual((1, 31), pyrex.rex('a(.+.+)+y').match('b' + 'a'*29+ 'yb'))
コード例 #23
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_simple_repetition_zero_or_one(self):
     self.assertEqual((0, 2), pyrex.rex('aa?').match('aa'))
コード例 #24
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_article_specially_crafted_regex(self, n=100):
     self.assertEqual((0, n), pyrex.rex('a?'*n+'a'*n).match('a'*n))
コード例 #25
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_grouping_simple(self):
     self.assertEqual((0, 5), pyrex.rex('a(ab)+').match('aabab'))
コード例 #26
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_regex_source(self):
     self.assertEqual('0000: CONSUME a\n0001: JUMP (1, 2)\n0002: CONSUME b\n0003: MATCH!', str(pyrex.rex('ab?')))
コード例 #27
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_single_literal(self):
     self.assertEqual((0, 1), pyrex.rex('a').match('a'))
コード例 #28
0
ファイル: view.py プロジェクト: RodolfoTI/pyrex
try: input = raw_input
except NameError: pass

def simulate(machine, string):
    for i, answer, state in machine.matcher(string):
        best = (string[answer[0]:answer[1]] + ' ' + str(answer) if answer else '<none>')
        print('Best answer: ' + best)
        print('Input: ' + string)
        print('       ' + i*' ' + '^' + ' (' + str(i) + ')')
        print()
        
        per_line = {item: str(start)+' >' for start, item in state}
        
        for j, line in enumerate(machine.source()):
            print('{:>5}{:04d}: {}'.format(per_line.get(j, ''), j, line))

        print('-----')
        input()
        
if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('usage: simulator.py <regex> <input>')
        sys.exit(1)
        
    print('-----')
    print('Matching pattern "{}" against input "{}"'.format(*sys.argv[1:]))
    print('-----')
    print()
    simulate(pyrex.rex(sys.argv[1]), sys.argv[2])
コード例 #29
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_will_match_greedly_in_the_middle(self):
     self.assertEqual((1, 31),
                      pyrex.rex('a(.+.+)+y').match('b' + 'a' * 29 + 'yb'))
コード例 #30
0
ファイル: view.py プロジェクト: juanplopes/pyrex

def simulate(machine, string):
    for i, answer, state in machine.matcher(string):
        best = (string[answer[0]:answer[1]] + ' ' +
                str(answer) if answer else '<none>')
        print('Best answer: ' + best)
        print('Input: ' + string)
        print('       ' + i * ' ' + '^' + ' (' + str(i) + ')')
        print()

        per_line = {item: str(start) + ' >' for start, item in state}

        for j, line in enumerate(machine.source()):
            print('{:>5}{:04d}: {}'.format(per_line.get(j, ''), j, line))

        print('-----')
        input()


if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('usage: simulator.py <regex> <input>')
        sys.exit(1)

    print('-----')
    print('Matching pattern "{}" against input "{}"'.format(*sys.argv[1:]))
    print('-----')
    print()
    simulate(pyrex.rex(sys.argv[1]), sys.argv[2])
コード例 #31
0
ファイル: test_pyrex.py プロジェクト: juanplopes/pyrex
 def test_regex_source(self):
     self.assertEqual(
         '0000: CONSUME a\n0001: JUMP (1, 2)\n0002: CONSUME b\n0003: MATCH!',
         str(pyrex.rex('ab?')))
コード例 #32
0
ファイル: test_pyrex.py プロジェクト: RodolfoTI/pyrex
 def test_single_literal_in_the_middle(self):
     self.assertEqual((1, 2), pyrex.rex('a').match('ba'))