|
@@ -27,11 +27,14 @@ nearley_grammar = r""" |
|
|
_JS: /(?s){%.*?%}/ |
|
|
_JS: /(?s){%.*?%}/ |
|
|
|
|
|
|
|
|
NAME: /[a-zA-Z_$]\w*/ |
|
|
NAME: /[a-zA-Z_$]\w*/ |
|
|
WS.ignore: /[\t \f\n]+/ |
|
|
|
|
|
COMMENT.ignore: /\#[^\n]*/ |
|
|
|
|
|
|
|
|
COMMENT: /\#[^\n]*/ |
|
|
REGEXP: /\[.*?\]/ |
|
|
REGEXP: /\[.*?\]/ |
|
|
STRING: /".*?"/ |
|
|
STRING: /".*?"/ |
|
|
|
|
|
|
|
|
|
|
|
%import common.WS |
|
|
|
|
|
%ignore WS |
|
|
|
|
|
%ignore COMMENT |
|
|
|
|
|
|
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -85,7 +88,7 @@ class NearleyToLark(InlineTransformer): |
|
|
return '\n'.join(filter(None, rules)) |
|
|
return '\n'.join(filter(None, rules)) |
|
|
|
|
|
|
|
|
def nearley_to_lark(g, builtin_path): |
|
|
def nearley_to_lark(g, builtin_path): |
|
|
parser = Lark(nearley_grammar) |
|
|
|
|
|
|
|
|
parser = Lark(nearley_grammar, parser='earley', lexer='standard') |
|
|
tree = parser.parse(g) |
|
|
tree = parser.parse(g) |
|
|
return NearleyToLark(builtin_path).transform(tree) |
|
|
return NearleyToLark(builtin_path).transform(tree) |
|
|
|
|
|
|
|
@@ -129,7 +132,7 @@ def test(): |
|
|
converted_grammar = nearley_to_lark(css_example_grammar, '/home/erez/nearley/builtin') |
|
|
converted_grammar = nearley_to_lark(css_example_grammar, '/home/erez/nearley/builtin') |
|
|
print(converted_grammar) |
|
|
print(converted_grammar) |
|
|
|
|
|
|
|
|
l = Lark(converted_grammar, start='csscolor', parser='earley_nolex') |
|
|
|
|
|
|
|
|
l = Lark(converted_grammar, start='csscolor') |
|
|
print(l.parse('#a199ff').pretty()) |
|
|
print(l.parse('#a199ff').pretty()) |
|
|
print(l.parse('rgb(255, 70%, 3)').pretty()) |
|
|
print(l.parse('rgb(255, 70%, 3)').pretty()) |
|
|
|
|
|
|
|
@@ -148,3 +151,4 @@ def main(): |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
if __name__ == '__main__': |
|
|
main() |
|
|
main() |
|
|
|
|
|
# test() |