diff --git a/grammar.js b/grammar.js index bb9a694..fbec092 100644 --- a/grammar.js +++ b/grammar.js @@ -1329,6 +1329,30 @@ module.exports = grammar({ $._terminator ), + run_tuning: ($) => + choice( + kw("PERSISTENT"), + kw("SINGLE-RUN"), + kw("SINGLETON"), + kw("ASYNCHRONOUS"), + seq(kw("SET"), $.identifier), + seq(kw("ON"), kw("SERVER"), $.identifier), + seq(kw("IN"), choice(kw("THIS-PROCEDURE"), $.identifier)), + seq(kw("EVENT-PROCEDURE"), $.string_literal) + ), + run_statement: ($) => + seq( + kw("RUN"), + field( + "procedure", + choice($.identifier, $.qualified_name, $.function_call) + ), + repeat($.run_tuning), + optional(alias($.function_arguments, $.arguments)), + optional(kw("NO-ERROR")), + $._terminator + ), + // Supertypes _expression: ($) => choice( @@ -1398,6 +1422,7 @@ module.exports = grammar({ $.prompt_for_statement, $.dataset_definition, $.button_definition, + $.run_statement, $.abl_statement, prec.left(PREC.EXTRA, $.label) ) diff --git a/test/corpus/basic.txt b/test/corpus/basic.txt index b06914a..2059784 100644 --- a/test/corpus/basic.txt +++ b/test/corpus/basic.txt @@ -2334,3 +2334,64 @@ VAR INT[ ] x = [funct( ), a + b]. (additive_expression (identifier) (identifier))))))) + +================================================================================ +RUN statement +================================================================================ + +RUN getMyNumber.p(piFirstNum, piSecNum). +RUN VALUE(programs[INDEX("12345", selection)]). +RUN recall-query IN phand. + +RUN server-error.p ON SERVER hServer + ASYNCHRONOUS SET hRequest EVENT-PROCEDURE "procDone" IN + THIS-PROCEDURE (OUTPUT numLines AS INTEGER). + +-------------------------------------------------------------------------------- + +(source_code + (run_statement + (qualified_name + (identifier) + (identifier)) + (arguments + (argument + (identifier)) + (argument + (identifier)))) + (run_statement + (function_call + (identifier) + (arguments + (argument + (array_access + (identifier) + (function_call + (identifier) + (arguments + (argument + (string_literal)) + (argument + (identifier))))))))) + (run_statement + (identifier) + (run_tuning + (identifier))) + (run_statement + (qualified_name + (identifier) + (identifier)) + (run_tuning + (identifier)) + (run_tuning) + (run_tuning + (identifier)) + (run_tuning + (string_literal)) + (run_tuning) + (arguments + (argument + (argument_mode) + (identifier) + (type_tuning + (primitive_type))))))