lark-action

semantic actions for lark-parser


License
MIT
Install
pip install lark-action==0.1.5

Documentation

lark-action

Adding semantic actions to Lark parser frontend.

Features:

  1. semantic action support
  2. inline python code
  3. %mkrepl
  4. Use # for comments instead of //.
  5. Use $1, $2, ... to acccess the i-th intermediate result.
  6. Use @1, @2, ... to access their locations(for token only)
  7. Use *1, *2, ... to access the lexeme of tokens(for token only)

(CONFESS: I develop this because the existing tools are crazily shitty.)

Usage

%mkrepl # generate a repl for you; not necessary

# inline python code into the generated parser
%%
def my_func():
    print("call myfunc")
%%


        
start : ESCAPED_STRING -> $1  # '$1' accesses the 1-st component
      | "%" start      -> my_func()

%import common.WS
%import common.ESCAPED_STRING
%ignore WS

execute command python -m lark_action <grammar.lark> [-- package=""] [--module="mylang"], with default arguments you get 3 generated files: mylang.lark and mylang_raw.py and mylang.py.

You can directly access the generated parser via from mylang import parser.

If %mkrepl is specified, you get a simple repl to check your parser:

python mylang.py
input 'q' and exit.
> % "asd"
call myfunc
None