Ejemplo n.º 1
0
    def test_digit_question(self):
        p = Parser()
        p.rule(Rule('digits', [], parser.text_match(r'[[0-9]]?')))
        self.parser = p

        self.p_ok("digits", "")
        self.p_ok("digits", "1")
        self.p_fail("digits", "12")
Ejemplo n.º 2
0
    def test_choice(self):
        p = Parser()
        p.rule(Rule('test', [], parser.text_match(r'$"foo" | $"bar"')))
        self.parser = p

        self.p_ok("test", "foo", "foo")
        self.p_ok("test", "bar", "bar")
        self.p_fail("test", "boo")
        self.p_fail("test", "baz")
Ejemplo n.º 3
0
    def test_string(self):
        p = Parser()
        p.rule(Rule('test', [], parser.text_match(r'$"foo"')))
        self.parser = p

        self.p_ok("test", "foo")
        self.p_fail("test", "fo")
        self.p_fail("test", "fooo")
        self.p_fail("test", "bar")
Ejemplo n.º 4
0
    def test_digit_star(self):
        p = Parser()
        p.rule(Rule('digits', [], parser.text_match(r'[[0-9]]*')))
        self.parser = p

        self.p_ok("digits", "")
        self.p_ok("digits", "1")
        self.p_ok("digits", "12")
        self.p_ok("digits", "1234567890")
Ejemplo n.º 5
0
    def test_list_append(self):
        p = Parser()
        p.rule(
            Rule(
                'test', [],
                parser.text_match(r'e = []; e << "a"; e << "b"; e << "c"; e')))
        self.parser = p

        self.p_ok("test", "", ['a', 'b', 'c'])
Ejemplo n.º 6
0
    def test_sequence(self):
        p = Parser()
        p.rule(Rule('test', [], parser.text_match(r'[[a]];[[b]]+')))
        self.parser = p

        self.p_fail("test", "a")
        self.p_ok("test", "ab")
        self.p_fail("test", "aa")
        self.p_fail("test", "aba")
        self.p_ok("test", "abb")
Ejemplo n.º 7
0
    def test_grouping(self):
        p = Parser()
        p.rule(Rule('test', [], parser.text_match(r'([[a]];[[b]])+')))
        self.parser = p

        self.p_fail("test", "a")
        self.p_ok("test", "ab")
        self.p_fail("test", "aa")
        self.p_fail("test", "aba")
        self.p_fail("test", "abb")
        self.p_ok("test", "abab")
        self.p_ok("test", "ababab")
Ejemplo n.º 8
0
    def test_call(self):
        p = Parser()
        p.rule(Native('add', [Param('a'), Param('b')], lambda a, b: a + b))
        p.rule(Rule('test', [], parser.text_match(r'add(1, 2)')))
        self.parser = p

        self.p_ok("test", "", 3)
Ejemplo n.º 9
0
    def test_char(self):
        p = Parser()
        p.rule(Rule('one', [], parser.text_match(r'[[0-9]]')))
        p.rule(Rule('two', [], parser.text_match(r'[[^0-9]]')))
        p.rule(Rule('three', [], parser.text_match(r'[[\t\n]]')))
        self.parser = p

        self.p_fail("one", "c")
        self.p_ok("one", "3")

        self.p_ok("two", "c")
        self.p_fail("two", "3")

        self.p_ok("three", "\t")
        self.p_ok("three", "\n")
        self.p_fail("three", r"\n")
Ejemplo n.º 10
0
from ritual.interpreter import Parser, Rule, Native, Param
import ritual.interpreter.location
import ritual.phase0.parser

from . import generate_python
from . import model
from . import optimize
from . import semantic

p = Parser()


def rule(name, body):
    p.rule(Rule(name, [], ritual.phase0.parser.text_match(body)))


def halt():
    import pdb
    pdb.set_trace()


p.rule(Native('chr', [Param('i')], chr))
p.rule(Native('hex_to_int', [Param('text')], lambda text: int(text, 16)))
p.rule(Native('dec_to_int', [Param('text')], lambda text: int(text, 10)))
p.rule(
    Native('chars_to_string', [Param('chars')], lambda chars: ''.join(chars)))
p.rule(Native('halt', [], halt))

model.registerTypes(p)

rule('S', r'([[ \t\n\r]]|$"//";[[^\n]]*)*')
Ejemplo n.º 11
0
 def test_assign(self):
     p = Parser()
     p.rule(
         Rule('test', [],
              parser.text_match(r'"("; c = [[a-zA-Z_]]; ")"; c')))
     self.parser = p
Ejemplo n.º 12
0
    def test_list_literal(self):
        p = Parser()
        p.rule(Rule('test', [], parser.text_match(r'["a", "b", "c"]')))
        self.parser = p

        self.p_ok("test", "", ['a', 'b', 'c'])