From fd57b438be7095866a42399fe0e3a011cd295140 Mon Sep 17 00:00:00 2001 From: anon Date: Sat, 11 Feb 2023 18:26:48 +0100 Subject: [PATCH] PLati: partial syntax fix --- PLati/algo.pks | 53 +++++++++++++++++++++++++------------------------- PLati/algo.tbl | 7 +++++-- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/PLati/algo.pks b/PLati/algo.pks index 2549430..a5dcb5b 100644 --- a/PLati/algo.pks +++ b/PLati/algo.pks @@ -1,29 +1,30 @@ -CREATE OR REPLACE PACKAGE algo - CREATE OR REPLACE SUBTYPE ASTRING IS VARCHAR(128); +CREATE OR REPLACE PACKAGE algo AS + SUBTYPE ASTRING IS VARCHAR(128); -- ### EMPTY_VAL CONSTANT CHAR(1) := '0'; TRUE_ CONSTANT CHAR(4) := 'true'; FALSE_ CONSTANT CHAR(5) := 'false'; -- ### - CREATE OR REPLACE PROCEDURE init; + PROCEDURE init; - CREATE OR REPLACE PROCEDURE assign_ (name_ ASTRING, val ASTRING); + PROCEDURE assign_ (name_ ASTRING, val ASTRING); - CREATE OR REPLACE FUNCTION arref IS ASTRING (s ASTRING); - CREATE OR REPLACE FUNCTION deref_ IS ASTRING (s ASTRING); - CREATE OR REPLACE FUNCTION aint IS INT (s ASTRING); + FUNCTION arref (s ASTRING) RETURN ASTRING; + FUNCTION deref_ (s ASTRING) RETURN ASTRING; + FUNCTION aint (s ASTRING) RETURN INT; - CREATE OR REPLACE PROCEDURE do_eval (opr1 ASTRING, oper CHAR, opr2 ASTRING); + PROCEDURE do_eval (opr1 ASTRING, oper CHAR, opr2 ASTRING); - CREATE OR REPLACE PROCEDURE pop (head INT); - CREATE OR REPLACE PROCEDURE push (head INT); + PROCEDURE pop (head INT); + PROCEDURE push (head INT); - CREATE OR REPLACE FUNCTION jump IS BOOLEAN (head INT, jmp INT, dest ASTRING, push CHAR); - CREATE OR REPLACE PROCEDURE call_ (head INT, jmp INT, dest ASTRING, is_push BOOLEAN); -END algo; + FUNCTION jump (head INT, jmp INT, dest ASTRING, push CHAR) RETURN BOOLEAN; + PROCEDURE call_ (head INT, jmp INT, dest ASTRING, is_push BOOLEAN); +END; +/ CREATE OR REPLACE PACKAGE BODY algo AS - CREATE OR REPLACE PROCEDURE init + PROCEDURE init IS BEGIN REPLACE INTO TABLE vars VALUES ('eval', ''), @@ -39,21 +40,21 @@ CREATE OR REPLACE PACKAGE BODY algo AS ('argv-8', ''), ('argv-9', '') ; - END + END; - CREATE OR REPLACE PROCEDURE assign_ ( + PROCEDURE assign_ ( name_ VARCHAR(128), val VARCHAR(128) - ) + ) IS BEGIN INSERT INTO vars (name_, val); - END + END; - CREATE OR REPLACE FUNCTION arref AS ASTRING (s ASTRING) + FUNCTION arref AS ASTRING (s ASTRING) DECLARE p INT; subs ASTRING; @@ -70,7 +71,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS RETURN s; END; - CREATE OR REPLACE FUNCTION deref_ AS ASTRING (s ASTRING) + FUNCTION deref_ AS ASTRING (s ASTRING) varval ASTRING; BEGIN s := arref(s); @@ -80,7 +81,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS WHEN OTHERS THEN RETURN s; END; - CREATE OR REPLACE FUNCTION aint AS INT (s ASTRING) + FUNCTION aint AS INT (s ASTRING) sign_ BOOLEAN := TRUE; i INT := 0; buf ASTRING := ''; @@ -110,7 +111,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS - CREATE OR REPLACE PROCEDURE do_eval (opr1 ASTRING, oper CHAR, opr2 ASTRING) + PROCEDURE do_eval (opr1 ASTRING, oper CHAR, opr2 ASTRING) DECLARE res ASTRING := ''; BEGIN @@ -129,7 +130,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS - CREATE OR REPLACE PROCEDURE pop (head INT) + PROCEDURE pop (head INT) DECLARE EMPTY_STACK EXCEPTION; BEGIN @@ -140,7 +141,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS SELECT bp INTO HEAD FROM callstack WHERE rowid = (SELECT MAX(rowid) FROM callstack); head := head + 1; END; - CREATE OR REPLACE PROCEDURE push (head INT) + PROCEDURE push (head INT) BEGIN UPDATE callstack SET (bp, head) WHERE rowid = (SELECT MAX(rowid) FROM callstack); INSERT INTO callstack VALUES (0); @@ -148,7 +149,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS - CREATE OR REPLACE FUNCTION jump AS BOOLEAN (head INT, jmp INT, dest ASTRING, push CHAR) + FUNCTION jump AS BOOLEAN (head INT, jmp INT, dest ASTRING, push CHAR) DECLARE ret BOOLEAN = FALSE; BEGIN @@ -171,7 +172,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS END CASE; RETURN ret; END; - CREATE OR REPLACE PROCEDURE call_ (head INT, jmp INT, dest ASTRING, is_push BOOLEAN) + PROCEDURE call_ (head INT, jmp INT, dest ASTRING, is_push BOOLEAN) BEGIN IF dest = 'return' THEN pop(head); diff --git a/PLati/algo.tbl b/PLati/algo.tbl index 0ebc265..5e365f5 100644 --- a/PLati/algo.tbl +++ b/PLati/algo.tbl @@ -1,8 +1,11 @@ -CREATE TABLE IF NOT EXISTS vars( +DROP TABLE vars; +DROP TABLE callstack; + +CREATE TABLE vars( name VARCHAR2(128), value VARCHAR2(128) ); -CREATE TABLE IF NOT EXISTS callstack( +CREATE TABLE callstack( bp INT );