PLati: partial syntax fix

This commit is contained in:
anon 2023-02-11 18:26:48 +01:00
parent e2eb4b6dfa
commit fd57b438be
2 changed files with 32 additions and 28 deletions

View File

@ -1,29 +1,30 @@
CREATE OR REPLACE PACKAGE algo CREATE OR REPLACE PACKAGE algo AS
CREATE OR REPLACE SUBTYPE ASTRING IS VARCHAR(128); SUBTYPE ASTRING IS VARCHAR(128);
-- ### -- ###
EMPTY_VAL CONSTANT CHAR(1) := '0'; EMPTY_VAL CONSTANT CHAR(1) := '0';
TRUE_ CONSTANT CHAR(4) := 'true'; TRUE_ CONSTANT CHAR(4) := 'true';
FALSE_ CONSTANT CHAR(5) := 'false'; 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); FUNCTION arref (s ASTRING) RETURN ASTRING;
CREATE OR REPLACE FUNCTION deref_ IS ASTRING (s ASTRING); FUNCTION deref_ (s ASTRING) RETURN ASTRING;
CREATE OR REPLACE FUNCTION aint IS INT (s 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); PROCEDURE pop (head INT);
CREATE OR REPLACE PROCEDURE push (head INT); PROCEDURE push (head INT);
CREATE OR REPLACE FUNCTION jump IS BOOLEAN (head INT, jmp INT, dest ASTRING, push CHAR); FUNCTION jump (head INT, jmp INT, dest ASTRING, push CHAR) RETURN BOOLEAN;
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);
END algo; END;
/
CREATE OR REPLACE PACKAGE BODY algo AS CREATE OR REPLACE PACKAGE BODY algo AS
CREATE OR REPLACE PROCEDURE init PROCEDURE init IS
BEGIN BEGIN
REPLACE INTO TABLE vars VALUES REPLACE INTO TABLE vars VALUES
('eval', ''), ('eval', ''),
@ -39,21 +40,21 @@ CREATE OR REPLACE PACKAGE BODY algo AS
('argv-8', ''), ('argv-8', ''),
('argv-9', '') ('argv-9', '')
; ;
END END;
CREATE OR REPLACE PROCEDURE assign_ ( PROCEDURE assign_ (
name_ VARCHAR(128), name_ VARCHAR(128),
val VARCHAR(128) val VARCHAR(128)
) ) IS
BEGIN BEGIN
INSERT INTO vars (name_, val); INSERT INTO vars (name_, val);
END END;
CREATE OR REPLACE FUNCTION arref AS ASTRING (s ASTRING) FUNCTION arref AS ASTRING (s ASTRING)
DECLARE DECLARE
p INT; p INT;
subs ASTRING; subs ASTRING;
@ -70,7 +71,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS
RETURN s; RETURN s;
END; END;
CREATE OR REPLACE FUNCTION deref_ AS ASTRING (s ASTRING) FUNCTION deref_ AS ASTRING (s ASTRING)
varval ASTRING; varval ASTRING;
BEGIN BEGIN
s := arref(s); s := arref(s);
@ -80,7 +81,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS
WHEN OTHERS THEN WHEN OTHERS THEN
RETURN s; RETURN s;
END; END;
CREATE OR REPLACE FUNCTION aint AS INT (s ASTRING) FUNCTION aint AS INT (s ASTRING)
sign_ BOOLEAN := TRUE; sign_ BOOLEAN := TRUE;
i INT := 0; i INT := 0;
buf ASTRING := ''; 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 DECLARE
res ASTRING := ''; res ASTRING := '';
BEGIN BEGIN
@ -129,7 +130,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS
CREATE OR REPLACE PROCEDURE pop (head INT) PROCEDURE pop (head INT)
DECLARE DECLARE
EMPTY_STACK EXCEPTION; EMPTY_STACK EXCEPTION;
BEGIN 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); SELECT bp INTO HEAD FROM callstack WHERE rowid = (SELECT MAX(rowid) FROM callstack);
head := head + 1; head := head + 1;
END; END;
CREATE OR REPLACE PROCEDURE push (head INT) PROCEDURE push (head INT)
BEGIN BEGIN
UPDATE callstack SET (bp, head) WHERE rowid = (SELECT MAX(rowid) FROM callstack); UPDATE callstack SET (bp, head) WHERE rowid = (SELECT MAX(rowid) FROM callstack);
INSERT INTO callstack VALUES (0); 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 DECLARE
ret BOOLEAN = FALSE; ret BOOLEAN = FALSE;
BEGIN BEGIN
@ -171,7 +172,7 @@ CREATE OR REPLACE PACKAGE BODY algo AS
END CASE; END CASE;
RETURN ret; RETURN ret;
END; 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 BEGIN
IF dest = 'return' THEN IF dest = 'return' THEN
pop(head); pop(head);

View File

@ -1,8 +1,11 @@
CREATE TABLE IF NOT EXISTS vars( DROP TABLE vars;
DROP TABLE callstack;
CREATE TABLE vars(
name VARCHAR2(128), name VARCHAR2(128),
value VARCHAR2(128) value VARCHAR2(128)
); );
CREATE TABLE IF NOT EXISTS callstack( CREATE TABLE callstack(
bp INT bp INT
); );