mirror of https://github.com/lark-parser/lark.git
89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import absolute_import
|
|
|
|
import unittest
|
|
import logging
|
|
import os
|
|
import codecs
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
from lark.tools.nearley import create_code_for_nearley_grammar, main as nearley_tool_main
|
|
|
|
TEST_PATH = os.path.abspath(os.path.dirname(__file__))
|
|
NEARLEY_PATH = os.path.join(TEST_PATH, 'nearley')
|
|
BUILTIN_PATH = os.path.join(NEARLEY_PATH, 'builtin')
|
|
|
|
if not os.path.exists(NEARLEY_PATH):
|
|
print("Skipping Nearley tests!")
|
|
raise ImportError("Skipping Nearley tests!")
|
|
|
|
class TestNearley(unittest.TestCase):
|
|
def test_css(self):
|
|
fn = os.path.join(NEARLEY_PATH, 'examples/csscolor.ne')
|
|
with open(fn) as f:
|
|
grammar = f.read()
|
|
|
|
code = create_code_for_nearley_grammar(grammar, 'csscolor', BUILTIN_PATH, os.path.dirname(fn))
|
|
d = {}
|
|
exec (code, d)
|
|
parse = d['parse']
|
|
|
|
c = parse('#a199ff')
|
|
assert c['r'] == 161
|
|
assert c['g'] == 153
|
|
assert c['b'] == 255
|
|
|
|
c = parse('rgb(255, 70%, 3)')
|
|
assert c['r'] == 255
|
|
assert c['g'] == 178
|
|
assert c['b'] == 3
|
|
|
|
def test_include(self):
|
|
fn = os.path.join(NEARLEY_PATH, 'test/grammars/folder-test.ne')
|
|
with open(fn) as f:
|
|
grammar = f.read()
|
|
|
|
code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
|
|
d = {}
|
|
exec (code, d)
|
|
parse = d['parse']
|
|
|
|
parse('a')
|
|
parse('b')
|
|
|
|
def test_multi_include(self):
|
|
fn = os.path.join(NEARLEY_PATH, 'test/grammars/multi-include-test.ne')
|
|
with open(fn) as f:
|
|
grammar = f.read()
|
|
|
|
code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, os.path.dirname(fn))
|
|
d = {}
|
|
exec (code, d)
|
|
parse = d['parse']
|
|
|
|
parse('a')
|
|
parse('b')
|
|
parse('c')
|
|
|
|
def test_utf8(self):
|
|
grammar = u'main -> "±a"'
|
|
code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './')
|
|
d = {}
|
|
exec (code, d)
|
|
parse = d['parse']
|
|
|
|
parse(u'±a')
|
|
|
|
def test_utf8_2(self):
|
|
fn = os.path.join(TEST_PATH, 'grammars/unicode.ne')
|
|
nearley_tool_main(fn, 'x', NEARLEY_PATH)
|
|
|
|
def test_include_utf8(self):
|
|
fn = os.path.join(TEST_PATH, 'grammars/include_unicode.ne')
|
|
nearley_tool_main(fn, 'main', NEARLEY_PATH)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|