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 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);

View File

@ -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
);