File: template_lark.lark

package info (click to toggle)
python-lark 1.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,788 kB
  • sloc: python: 13,305; javascript: 88; makefile: 34; sh: 8
file content (56 lines) | stat: -rw-r--r-- 1,520 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
start: (_item | _NL)*

_item: rule
     | token
     | statement

_rule_or_token: RULE
              | TOKEN
rule: RULE rule_params priority? ":" expansions{_rule_or_token} _NL
token: TOKEN priority? ":" expansions{TOKEN} _NL

rule_params: ["{" RULE ("," RULE)* "}"]

priority: "." NUMBER

statement: "%ignore" expansions{TOKEN} _NL         -> ignore
         | "%import" import_path{_rule_or_token} ["->" _rule_or_token] _NL   -> import
         | "%import" import_path{_rule_or_token} name_list{_rule_or_token} _NL     -> multi_import
         | "%declare" TOKEN+                        -> declare

!import_path{name}: "."? name ("." name)*
name_list{name}: "(" name ("," name)* ")"

?expansions{name}: alias{name} (_VBAR alias{name})*

?alias{name}: expansion{name} ["->" RULE]

?expansion{name}: expr{name}*

?expr{name}: atom{name} [OP | "~" NUMBER [".." NUMBER]]

?atom{name}: "(" expansions{name} ")"
           | "[" expansions{name} "]" -> maybe
           | value{name}

?value{name}: STRING ".." STRING -> literal_range
            | name
            | (REGEXP | STRING) -> literal
            | name "{" value{name} ("," value{name})* "}" -> template_usage

_VBAR: _NL? "|"
OP: /[+*]|[?](?![a-z])/
RULE: /!?[_?]?[a-z][_a-z0-9]*/
TOKEN: /_?[A-Z][_A-Z0-9]*/
STRING: _STRING "i"?
REGEXP: /\/(?!\/)(\\\/|\\\\|[^\/\n])*?\/[imslux]*/
_NL: /(\r?\n)+\s*/

%import common.ESCAPED_STRING -> _STRING
%import common.INT -> NUMBER
%import common.WS_INLINE

COMMENT: /\s*/ "//" /[^\n]/*

%ignore WS_INLINE
%ignore COMMENT