예제 #1
0
def test_packGrammar():
    gramSpec = ['<rule> exported = action;']
    parser = GramParser(gramSpec)
    parser.doParse()
    parser.checkForErrors()
    assert parser.knownRules == {'rule': 1}
    assert parser.knownWords == {'action': 1}
    assert parser.exportRules == {'rule': 1}
    assert parser.ruleDefines == {'rule': [('word', 1)]}

    assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00' \
                                  b'\x01\x00\x00\x00rule\x00\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00' \
                                  b'\x00\x01\x00\x00\x00action\x00\x00\x03\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00' \
                                  b'\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00'
예제 #2
0
def test_packGrammar_with_list():
    gramSpec = ['<ruleList> exported = action {List};']
    parser = GramParser(gramSpec)
    parser.doParse()
    parser.checkForErrors()
    assert parser.knownRules == {'ruleList': 1}
    assert parser.knownLists == {'List': 1}
    assert parser.knownWords == {'action': 1}
    assert parser.exportRules == {'ruleList': 1}
    assert parser.ruleDefines == {'ruleList': [('start', 1), ('word', 1), ('list', 1), ('end', 1)]}

    assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x14\x00\x00\x00' \
                                  b'\x01\x00\x00\x00ruleList\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00\x10\x00' \
                                  b'\x00\x00\x01\x00\x00\x00List\x00\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x10' \
                                  b'\x00\x00\x00\x01\x00\x00\x00action\x00\x00\x03\x00\x00\x00(\x00\x00\x00(\x00\x00' \
                                  b'\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00' \
                                  b'\x00\x06\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00'
예제 #3
0
def test_packGrammar_with_two_lines():
    gramSpec = ['<rule1> exported = action one;', '<rule2> exported = action two;']
    parser = GramParser(gramSpec)
    parser.doParse()
    parser.checkForErrors()
    assert parser.knownRules == {'rule1': 1, 'rule2': 2}
    assert parser.knownWords == {'action': 1, 'one': 2, 'two': 3}
    assert parser.exportRules == {'rule1': 1, 'rule2': 2}
    assert parser.ruleDefines == {'rule1': [('start', 1), ('word', 1), ('word', 2), ('end', 1)],
                                  'rule2': [('start', 1), ('word', 1), ('word', 3), ('end', 1)]}

    assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x01' \
                                  b'\x00\x00\x00rule1\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00rule2\x00\x00\x00' \
                                  b'\x02\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00action\x00\x00\x0c' \
                                  b'\x00\x00\x00\x02\x00\x00\x00one\x00\x0c\x00\x00\x00\x03\x00\x00\x00two\x00\x03' \
                                  b'\x00\x00\x00P\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00' \
                                  b'\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x02\x00' \
                                  b'\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00' \
                                  b'\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00' \
                                  b'\x00\x01\x00\x00\x00'