227 lines
6.4 KiB
Plaintext
227 lines
6.4 KiB
Plaintext
start: program
|
|
|
|
program: separator* line_or_comment (separator+ line_or_comment)* separator*
|
|
|
|
?line_or_comment: simple_stmt comment?
|
|
| compound_stmt
|
|
| comment
|
|
| BLOCK_COMMENT
|
|
|
|
?separator: EOL+
|
|
|
|
comment: DOC_COMMENT | LINE_COMMENT
|
|
|
|
EOL: /\r?\n/
|
|
|
|
DOC_COMMENT.2: /\/\/\/[^\r\n]*/
|
|
LINE_COMMENT.1: /\/\/[^\r\n]*/
|
|
BLOCK_COMMENT: /\/\*[\s\S]*?\*\//
|
|
|
|
?simple_stmt: assignment
|
|
| return_stmt
|
|
| system_command
|
|
| io_command
|
|
| async_command
|
|
| connector_cmd
|
|
| db_command
|
|
| http_command
|
|
| util_command
|
|
| modularity_cmd
|
|
| call_stmt
|
|
|
|
?compound_stmt: function_decl
|
|
| if_stmt
|
|
| loop_stmt
|
|
| try_stmt
|
|
|
|
assignment: identifier "=" expression
|
|
|
|
call_stmt: identifier "(" argument_list? ")"
|
|
| identifier "=" identifier "." identifier "(" argument_list? ")"
|
|
| identifier "." identifier "(" argument_list? ")"
|
|
|
|
system_command: register_cmd
|
|
| addvar_cmd
|
|
|
|
register_cmd: "registerEndpoint" "(" stringliteral "," stringliteral "," list_display "," stringliteral "," identifier "," identifier ")"
|
|
|
|
addvar_cmd: "addVar" "(" addvar_arg "," addvar_arg ")"
|
|
|
|
addvar_arg: identifier
|
|
| literal
|
|
| "$" identifier
|
|
|
|
identifier: IDENTIFIER
|
|
|
|
system_variable: "_status"
|
|
|
|
io_command: addparam_cmd
|
|
| getlistlen_cmd
|
|
| addresult_cmd
|
|
| getparamlist_cmd
|
|
|
|
addparam_cmd: "addParam" "(" stringliteral "," identifier ")"
|
|
getlistlen_cmd: "getListLen" "(" identifier "," identifier ")"
|
|
getparamlist_cmd: "getQueryParamList" "(" stringliteral "," identifier ")"
|
|
addresult_cmd: "addResult" "(" identifier ")"
|
|
|
|
if_stmt: "if" "(" if_condition ")" separator block ("else" "(" ")" separator block)? "end" "(" ")"
|
|
|
|
if_condition: if_atom "," if_atom "," stringliteral
|
|
| "None" "," "None" "," stringliteral
|
|
|
|
if_atom: identifier
|
|
| literal
|
|
|
|
loop_stmt: "startLoop" "(" identifier "," expression "," expression ")" separator block "endLoop" "(" ")"
|
|
|
|
try_stmt: "try" "(" ")" separator block "exception" "(" identifier ")" separator block "end" "(" ")"
|
|
|
|
block: separator* line_or_comment (separator+ line_or_comment)* separator*
|
|
|
|
async_command: go_stmt
|
|
| gather_stmt
|
|
|
|
go_stmt: identifier "=" "go" identifier "(" argument_list? ")"
|
|
gather_stmt: identifier "=" "gather" "(" identifier ("," expression)? ")"
|
|
|
|
connector_cmd: connector_instantiation
|
|
|
|
connector_instantiation: identifier "=" "avapConnector" "(" stringliteral ")"
|
|
|
|
http_command: req_post_cmd
|
|
| req_get_cmd
|
|
|
|
req_post_cmd: "RequestPost" "(" expression "," expression "," expression "," expression "," identifier "," expression ")"
|
|
req_get_cmd: "RequestGet" "(" expression "," expression "," expression "," identifier "," expression ")"
|
|
|
|
db_command: orm_direct
|
|
| orm_check
|
|
| orm_create
|
|
| orm_select
|
|
| orm_insert
|
|
| orm_update
|
|
|
|
orm_direct: "ormDirect" "(" expression "," identifier ")"
|
|
orm_check: "ormCheckTable" "(" expression "," identifier ")"
|
|
orm_create: "ormCreateTable" "(" expression "," expression "," expression "," identifier ")"
|
|
|
|
orm_select: "ormAccessSelect" "(" orm_fields "," expression ("," expression)? "," identifier ")"
|
|
|
|
orm_fields: "*"
|
|
| expression
|
|
|
|
orm_insert: "ormAccessInsert" "(" expression "," expression "," identifier ")"
|
|
orm_update: "ormAccessUpdate" "(" expression "," expression "," expression "," expression "," identifier ")"
|
|
|
|
util_command: json_list_cmd
|
|
| crypto_cmd
|
|
| regex_cmd
|
|
| datetime_cmd
|
|
| stamp_cmd
|
|
| string_cmd
|
|
| replace_cmd
|
|
|
|
json_list_cmd: "variableToList" "(" expression "," identifier ")"
|
|
| "itemFromList" "(" identifier "," expression "," identifier ")"
|
|
| "variableFromJSON" "(" identifier "," expression "," identifier ")"
|
|
| "AddVariableToJSON" "(" expression "," expression "," identifier ")"
|
|
|
|
crypto_cmd: "encodeSHA256" "(" identifier_or_string "," identifier ")"
|
|
| "encodeMD5" "(" identifier_or_string "," identifier ")"
|
|
|
|
regex_cmd: "getRegex" "(" identifier "," stringliteral "," identifier ")"
|
|
|
|
datetime_cmd: "getDateTime" "(" stringliteral "," expression "," stringliteral "," identifier ")"
|
|
|
|
stamp_cmd: "stampToDatetime" "(" expression "," stringliteral "," expression "," identifier ")"
|
|
| "getTimeStamp" "(" stringliteral "," stringliteral "," expression "," identifier ")"
|
|
|
|
string_cmd: "randomString" "(" expression "," expression "," identifier ")"
|
|
|
|
replace_cmd: "replace" "(" identifier_or_string "," stringliteral "," stringliteral "," identifier ")"
|
|
|
|
function_decl: "function" identifier "(" param_list? ")" "{" separator block "}"
|
|
|
|
param_list: identifier ("," identifier)*
|
|
|
|
return_stmt: "return" "(" expression? ")"
|
|
|
|
modularity_cmd: include_stmt
|
|
| import_stmt
|
|
|
|
include_stmt: "include" stringliteral
|
|
import_stmt: "import" ("<" identifier ">" | stringliteral)
|
|
|
|
?expression: logical_or
|
|
|
|
?logical_or: logical_and ("or" logical_and)*
|
|
?logical_and: logical_not ("and" logical_not)*
|
|
|
|
?logical_not: "not" logical_not
|
|
| comparison
|
|
|
|
?comparison: arithmetic (comp_op arithmetic)*
|
|
|
|
comp_op: "==" | "!=" | "<" | ">" | "<=" | ">=" | "in" | "is"
|
|
|
|
?arithmetic: term (("+" | "-") term)*
|
|
?term: factor (("*" | "/" | "%") factor)*
|
|
|
|
?factor: ("+" | "-") factor
|
|
| power
|
|
|
|
?power: primary ("**" factor)?
|
|
|
|
?primary: atom postfix*
|
|
|
|
postfix: "." identifier
|
|
| "[" expression "]"
|
|
| "[" expression? ":" expression? (":" expression?)? "]"
|
|
| "(" argument_list? ")"
|
|
|
|
?atom: identifier
|
|
| "$" identifier
|
|
| literal
|
|
| "(" expression ")"
|
|
| list_display
|
|
| dict_display
|
|
|
|
list_display: "[" argument_list? "]"
|
|
| "[" expression "for" identifier "in" expression if_clause? "]"
|
|
|
|
if_clause: "if" expression
|
|
|
|
dict_display: "{" key_datum_list? "}"
|
|
|
|
key_datum_list: key_datum ("," key_datum)*
|
|
key_datum: expression ":" expression
|
|
|
|
argument_list: expression ("," expression)*
|
|
|
|
number: FLOATNUMBER
|
|
| INTEGER
|
|
|
|
literal: stringliteral
|
|
| number
|
|
| boolean
|
|
| "None"
|
|
|
|
boolean: "True" | "False"
|
|
|
|
INTEGER: /[0-9]+/
|
|
FLOATNUMBER: /(?:[0-9]+\.[0-9]*|\.[0-9]+)/
|
|
|
|
stringliteral: STRING_DOUBLE
|
|
| STRING_SINGLE
|
|
|
|
|
|
STRING_DOUBLE: /"([^"\\]|\\.)*"/
|
|
STRING_SINGLE: /'([^'\\]|\\.)*'/
|
|
|
|
identifier_or_string: identifier
|
|
| stringliteral
|
|
|
|
IDENTIFIER: /[A-Za-z_][A-Za-z0-9_]*/
|
|
|
|
%ignore /[ \t]+/ |