From b1dad3e52dfe168249e74464fd9d30c4ae465530 Mon Sep 17 00:00:00 2001 From: Kamil Jakubus Date: Mon, 18 Nov 2024 04:55:06 +0100 Subject: [PATCH] parser: better define parameter definition Fixes #98 --- grammar.js | 24 +++++++++++-- test/corpus/basic.txt | 82 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 97 insertions(+), 9 deletions(-) diff --git a/grammar.js b/grammar.js index 8be435e..f38b91d 100644 --- a/grammar.js +++ b/grammar.js @@ -482,14 +482,32 @@ module.exports = grammar({ choice($._block_terminator, $._procedure_terminator) ), + procedure_parameter_tuning: ($) => + choice(kw("APPEND"), kw("BIND"), kw("BY-VALUE")), + procedure_parameter_definition: ($) => seq( choice(kw("DEFINE"), kw("DEF")), - choice(kw("INPUT"), kw("OUTPUT"), kw("INPUT-OUTPUT"), kw("RETURN")), + optional( + choice(kw("INPUT"), kw("OUTPUT"), kw("INPUT-OUTPUT"), kw("RETURN")) + ), choice(kw("PARAMETER"), kw("PARAM")), + optional( + choice( + seq(kw("BUFFER"), field("buffer", $.identifier)), + choice( + kw("TABLE"), + kw("TABLE-HANDLE"), + seq(kw("DATASET"), optional(token.immediate(kw("-HANDLE")))) + ) + ) + ), + optional(kw("FOR")), field("name", $.identifier), - $.type_tuning, - repeat($.variable_tuning), + choice( + seq($.type_tuning, repeat($.variable_tuning)), + repeat($.procedure_parameter_tuning) + ), $._terminator ), diff --git a/test/corpus/basic.txt b/test/corpus/basic.txt index 16e27cb..42eaae1 100644 --- a/test/corpus/basic.txt +++ b/test/corpus/basic.txt @@ -812,6 +812,27 @@ END PROCEDURE. PROCEDURE another_procedure: END. +DEFINE INPUT-OUTPUT PARAMETER TABLE-HANDLE hNode. +DEFINE OUTPUT PARAMETER TABLE-HANDLE hData. +DEFINE OUTPUT PARAMETER TABLE-HANDLE hSchema. +DEFINE INPUT PARAMETER DATASET-HANDLE hDset. +DEFINE OUTPUT PARAMETER TABLE-HANDLE ttHandle. + +DEFINE INPUT PARAMETER TABLE FOR ttCustomer. +DEFINE OUTPUT PARAMETER TABLE FOR ttOrder APPEND. +DEFINE INPUT-OUTPUT PARAMETER TABLE FOR ttProduct BIND. +DEFINE INPUT PARAMETER TABLE-HANDLE hCustomer. +DEFINE OUTPUT PARAMETER TABLE-HANDLE hOrder BY-VALUE. +DEFINE INPUT-OUTPUT PARAMETER TABLE-HANDLE hProduct BIND BY-VALUE. +DEFINE INPUT PARAMETER DATASET FOR dsCustomer. +DEFINE OUTPUT PARAMETER DATASET FOR dsOrder APPEND. +DEFINE INPUT-OUTPUT PARAMETER DATASET FOR dsProduct BIND. +DEFINE INPUT PARAMETER DATASET-HANDLE hCustomer. +DEFINE OUTPUT PARAMETER DATASET-HANDLE hOrder BY-VALUE. +DEFINE INPUT-OUTPUT PARAMETER DATASET-HANDLE hProduct BIND BY-VALUE. +DEFINE PARAMETER BUFFER bBuf FOR field. +DEFINE INPUT PARAMETER DATASET FOR field. + -------------------------------------------------------------------------------- (source_code @@ -826,7 +847,56 @@ END. (comment)) (procedure_statement (identifier) - (body))) + (body)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier) + (procedure_parameter_tuning) + (procedure_parameter_tuning)) + (procedure_parameter_definition + (identifier) + (identifier)) + (procedure_parameter_definition + (identifier))) ================================================================================ FUNCTION statement @@ -1995,7 +2065,7 @@ DISPLAY Order.CustNum Order.OrderDate Andsomething AndBug. INTERFACE statement ================================================================================ -INTERFACE r-ICustObj: +INTERFACE r-ICustObj: /* Property prototypes to return basic values for the Customer identified with the highest balance in the database */ @@ -2005,9 +2075,9 @@ INTERFACE r-ICustObj: DEFINE PUBLIC PROPERTY HighCustNum AS INTEGER NO-UNDO GET. SET. - + /* Event prototype to notify about Customers with Invoices */ - DEFINE PUBLIC EVENT CustHasInvoices + DEFINE PUBLIC EVENT CustHasInvoices SIGNATURE VOID ( piCustNum AS INTEGER ). /* Temp-tables for the ProDataSet parameter */ @@ -2017,7 +2087,7 @@ INTERFACE r-ICustObj: /* ProDataSet parameter for passing a single Customer with the highest balance along with its related Invoices */ DEFINE DATASET dsHighCustData FOR ttCust, ttInv - DATA-RELATION FOR ttCust, ttInv + DATA-RELATION FOR ttCust, ttInv RELATION-FIELDS (ttCust.CustNum, ttInv.CustNum). /* Method prototype to get the current high Customer balance data */ @@ -2146,7 +2216,7 @@ VAR myclass myobj = NEW myclass(). VAR myclass myobj = NEW myclass("Progress", 2020,?). /* Multiple instantiated object variables */ -VAR myclass myobj1 = NEW myclass("MA"), +VAR myclass myobj1 = NEW myclass("MA"), myobj2 = NEW myclass("VT"), myobj3 = NEW myclass("NH").