Browse Source

Updated lark.lark + added template_lark.lark, showcasing templates

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.8.6
MegaIng1 5 years ago
parent
commit
6d3477bbc7
2 changed files with 67 additions and 5 deletions
  1. +11
    -5
      examples/lark.lark
  2. +56
    -0
      examples/template_lark.lark

+ 11
- 5
examples/lark.lark View File

@@ -4,8 +4,11 @@ _item: rule
| token
| statement

rule: RULE priority? ":" expansions _NL
token: TOKEN priority? ":" expansions _NL
rule: RULE rule_params priority? ":" expansions _NL
token: TOKEN token_params priority? ":" expansions _NL

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

priority: "." NUMBER

@@ -27,9 +30,12 @@ name_list: "(" name ("," name)* ")"

?atom: "(" expansions ")"
| "[" expansions "]" -> maybe
| STRING ".." STRING -> literal_range
| name
| (REGEXP | STRING) -> literal
| value

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

name: RULE
| TOKEN


+ 56
- 0
examples/template_lark.lark View File

@@ -0,0 +1,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

Loading…
Cancel
Save