parser.py 471 B

1234567891011121314151617181920212223242526272829
  1. grammar = r"""
  2. %import common.WS_INLINE
  3. %ignore WS_INLINE
  4. %ignore COMMENT
  5. %declare _INDENT _DEDENT
  6. ?start: (_NL | object )*
  7. IDENTIFIER: /[A-Za-z_][A-Za-z_0-9]*/
  8. COMMENT: /#.*/
  9. # newline
  10. _NL: /(\r?\n[\t ]*)+/
  11. literal: INT
  12. | STR
  13. | BOOL
  14. INT: /[0-9]+/
  15. STR: /"[^"]*"/
  16. | /'[^']*'/
  17. BOOL: "True" | "False"
  18. object: [IDENTIFIER] ":" IDENTIFIER [link] _NL [_INDENT slot+ _DEDENT]
  19. link: "(" IDENTIFIER "->" IDENTIFIER ")"
  20. slot: IDENTIFIER "=" literal _NL
  21. """