This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.5 KiB

  1. start: (_item | _NL)*
  2. _item: rule
  3. | token
  4. | statement
  5. _rule_or_token: RULE
  6. | TOKEN
  7. rule: RULE rule_params priority? ":" expansions{_rule_or_token} _NL
  8. token: TOKEN priority? ":" expansions{TOKEN} _NL
  9. rule_params: ["{" RULE ("," RULE)* "}"]
  10. priority: "." NUMBER
  11. statement: "%ignore" expansions{TOKEN} _NL -> ignore
  12. | "%import" import_path{_rule_or_token} ["->" _rule_or_token] _NL -> import
  13. | "%import" import_path{_rule_or_token} name_list{_rule_or_token} _NL -> multi_import
  14. | "%declare" TOKEN+ -> declare
  15. !import_path{name}: "."? name ("." name)*
  16. name_list{name}: "(" name ("," name)* ")"
  17. ?expansions{name}: alias{name} (_VBAR alias{name})*
  18. ?alias{name}: expansion{name} ["->" RULE]
  19. ?expansion{name}: expr{name}*
  20. ?expr{name}: atom{name} [OP | "~" NUMBER [".." NUMBER]]
  21. ?atom{name}: "(" expansions{name} ")"
  22. | "[" expansions{name} "]" -> maybe
  23. | value{name}
  24. ?value{name}: STRING ".." STRING -> literal_range
  25. | name
  26. | (REGEXP | STRING) -> literal
  27. | name "{" value{name} ("," value{name})* "}" -> template_usage
  28. _VBAR: _NL? "|"
  29. OP: /[+*]|[?](?![a-z])/
  30. RULE: /!?[_?]?[a-z][_a-z0-9]*/
  31. TOKEN: /_?[A-Z][_A-Z0-9]*/
  32. STRING: _STRING "i"?
  33. REGEXP: /\/(?!\/)(\\\/|\\\\|[^\/\n])*?\/[imslux]*/
  34. _NL: /(\r?\n)+\s*/
  35. %import common.ESCAPED_STRING -> _STRING
  36. %import common.INT -> NUMBER
  37. %import common.WS_INLINE
  38. COMMENT: /\s*/ "//" /[^\n]/*
  39. %ignore WS_INLINE
  40. %ignore COMMENT