Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFIER: /[A-Za-z_?!][A-Za-z0-9_?!]*/
- INTEGER: ("0".."9")+
- COMMENT: "//" /[^\n]*/
- top_level_compound: top_level_single* -> multi
- top_level_single: "function" IDENTIFIER arg_list multi_stmt? "end" -> function
- | "procedure" IDENTIFIER multi_stmt? "end" -> procedure
- | "structure" IDENTIFIER *IDENTIFIER "end"
- | "const" IDENTIFIER "=" expr
- multi_stmt: stmt (";"? stmt)* -> multi
- stmt: expr -> const
- | "return" expr -> return_
- | "break" -> break_
- | "if" expr "then" multi_stmt? ("elseif" expr "then" multi_stmt?)* "end" -> if_no_else
- | "if" expr "then" multi_stmt? ("elseif" expr "then" multi_stmt?)* "else" multi_stmt? "end" -> if_else
- | "while" expr "do" multi_stmt? "end" -> while_
- | IDENTIFIER "=" expr -> assign
- expr: sum -> const
- | expr "." expr -> get_attr
- | bool_sum -> const
- | list -> const
- | range_literal -> const
- | expr arg_list -> func_call
- | expr "==" expr -> eq
- | expr ">" expr -> gt
- | expr "<" expr -> lt
- | expr ">=" expr -> ge
- | expr "<=" expr -> le
- | "#" expr -> length
- list: "[" compound_expr "]" -> list_
- | "[]" -> list_
- arg_list: "(" compound_expr ")" -> list_
- | "()" -> list
- range_literal: "{" atom ".." atom "}" -> range
- compound_expr: expr ("," expr)* -> multi
- bool_sum: bool_product -> const
- | bool_sum "or" bool_product -> or_
- bool_product: bool -> const
- | bool_product "and" bool -> and_
- bool: "true" -> boolt
- | "false" -> boolf
- | "not" bool -> not_
- | "(" bool_sum ")" -> const
- sum: product -> const
- | sum "+" product -> add
- | sum "-" product -> sub
- product: atom -> const
- | product "*" atom -> mul
- | product "/" atom -> div
- | product "%" atom -> mod
- atom: INTEGER -> num
- | IDENTIFIER -> iden
- | ESCAPED_STRING -> string
- | "(" sum ")" -> const
- %import common.WS
- %import common.ESCAPED_STRING
- %ignore WS
- %ignore COMMENT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement