мелкие правки

улучшена обработка пути главного модуля
-lower: допускается нижний регистр в числовых литералах ("1.37e14", "0abcdh", "0ffx")
RVMxI: исправлена ошибка, порт на Linux
This commit is contained in:
AntKrotov committed 2021-02-12 21:22:43 +03:00
1 parent 6fb87a797f
commit bb8f633206
12 files changed
+61 -51

No files matched your search

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+10 -1
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2020, Anton Krotov
Copyright (c) 2020-2021, Anton Krotov
All rights reserved.
*)
@@ -12,9 +12,18 @@ IMPORT SYSTEM, Trap;
CONST
$IF (host_linux)
slash* = "/";
eol* = 0AX;
$ELSE
slash* = "\";
eol* = 0DX + 0AX;
$END
bit_depth* = 32;
maxint* = 7FFFFFFFH;
minint* = 80000000H;
+9
View File
@@ -12,9 +12,18 @@ IMPORT SYSTEM, Trap;
CONST
$IF (host_linux)
slash* = "/";
eol* = 0AX;
$ELSE
slash* = "\";
eol* = 0DX + 0AX;
$END
bit_depth* = 64;
maxint* = ROR(-2, 1);
minint* = ROR(1, 1);
+13 -6
View File
@@ -158,7 +158,7 @@ BEGIN
n := -1;
i := 0;
WHILE (s[i] # "H") & (s[i] # "X") & (error = 0) DO
WHILE (s[i] # "H") & (s[i] # "X") & (s[i] # "h") & (s[i] # "x") & (error = 0) DO
d := digit[ORD(s[i])];
IF (n = -1) & (d # 0) THEN
@@ -176,13 +176,13 @@ BEGIN
value := UTILS.Long(value);
IF (s[i] = "X") & (n # -1) & (i - n > 4) THEN
IF ((s[i] = "X") OR (s[i] = "x")) & (n # -1) & (i - n > 4) THEN
error := 3
END;
IF error = 0 THEN
v.int := value;
IF s[i] = "X" THEN
IF (s[i] = "X") OR (s[i] = "x") THEN
v.typ := tCHAR;
IF ~check(v) THEN
v.typ := tWCHAR;
@@ -217,6 +217,7 @@ END opFloat2;
PROCEDURE fconv* (s: ARRAY OF CHAR; VAR v: VALUE; VAR error: INTEGER);
VAR
value: REAL;
frac: REAL;
exp10: REAL;
i, n, d: INTEGER;
minus: BOOLEAN;
@@ -224,7 +225,8 @@ VAR
BEGIN
error := 0;
value := 0.0;
exp10 := 10.0;
frac := 0.0;
exp10 := 1.0;
minus := FALSE;
n := 0;
@@ -240,14 +242,19 @@ BEGIN
INC(i);
WHILE (error = 0) & STRINGS.digit(s[i]) DO
IF opFloat2(value, FLT(digit[ORD(s[i])]) / exp10, "+") & opFloat2(exp10, 10.0, "*") THEN
IF opFloat2(frac, 10.0, "*") & opFloat2(frac, FLT(digit[ORD(s[i])]), "+") THEN
exp10 := exp10 * 10.0;
INC(i)
ELSE
error := 4
END
END;
IF s[i] = "E" THEN
IF ~opFloat2(value, frac / exp10, "+") THEN
error := 4
END;
IF (s[i] = "E") OR (s[i] = "e") THEN
INC(i)
END;
+1 -11
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2018-2020, Anton Krotov
Copyright (c) 2018-2021, Anton Krotov
All rights reserved.
*)
@@ -33,16 +33,6 @@ BEGIN
END Int;
PROCEDURE Hex* (x, n: INTEGER);
VAR
s: ARRAY 24 OF CHAR;
BEGIN
STRINGS.IntToHex(x, s, n);
String(s)
END Hex;
PROCEDURE Int2* (x: INTEGER);
BEGIN
IF x < 10 THEN
+2
View File
@@ -198,6 +198,8 @@ BEGIN
lib_path := path;
UTILS.GetArg(1, inname);
STRINGS.replace(inname, "\", UTILS.slash);
STRINGS.replace(inname, "/", UTILS.slash);
C.Ln;
C.String("Akron Oberon Compiler v"); C.Int(UTILS.vMajor); C.String("."); C.Int2(UTILS.vMinor);
+5 -3
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2018-2020, Anton Krotov
Copyright (c) 2018-2021, Anton Krotov
All rights reserved.
*)
@@ -66,8 +66,10 @@ BEGIN
error := FALSE;
j := 0;
IF (relative[0] = ".") & (relative[1] = slash) THEN
j := 2
WHILE (relative[j] = ".") & (relative[j + 1] = slash) DO
INC(j, 2)
ELSIF relative[j] = slash DO
INC(j)
END;
WHILE ~error & (relative[j] # 0X) DO
+5 -4
View File
@@ -243,18 +243,19 @@ BEGIN
c := nextc(text)
END;
WHILE S.hexdigit(c) DO
WHILE S.hexdigit(c) OR LowerCase & ("a" <= c) & (c <= "f") DO
S.cap(c);
push(num, i, c);
c := nextc(text);
hex := TRUE
END;
IF c = "H" THEN
IF (c = "H") OR LowerCase & (c = "h") THEN
push(num, i, c);
TXT.next(text);
sym := lxHEX
ELSIF c = "X" THEN
ELSIF (c = "X") OR LowerCase & (c = "x") THEN
push(num, i, c);
TXT.next(text);
sym := lxCHAR
@@ -281,7 +282,7 @@ BEGIN
c := nextc(text)
END;
IF c = "E" THEN
IF (c = "E") OR LowerCase & (c = "e") THEN
push(num, i, c);
c := nextc(text);
+1 -12
View File
@@ -73,17 +73,6 @@ BEGIN
END IntToStr;
PROCEDURE IntToHex* (x: INTEGER; VAR str: ARRAY OF CHAR; n: INTEGER);
BEGIN
str[n] := 0X;
WHILE n > 0 DO
str[n - 1] := CHR(UTILS.hexdgt(x MOD 16));
x := x DIV 16;
DEC(n)
END
END IntToHex;
PROCEDURE search* (s: ARRAY OF CHAR; VAR pos: INTEGER; c: CHAR; forward: BOOLEAN);
VAR
length: INTEGER;
@@ -171,7 +160,7 @@ PROCEDURE space* (c: CHAR): BOOLEAN;
END space;
PROCEDURE cap (VAR c: CHAR);
PROCEDURE cap* (VAR c: CHAR);
BEGIN
IF ("a" <= c) & (c <= "z") THEN
c := CHR(ORD(c) - 32)
+3 -4
View File
@@ -8,8 +8,6 @@
(*
RVMxI executor and disassembler
for Windows only
Usage:
RVMxI.exe <program file> -run [program parameters]
RVMxI.exe <program file> -dis <output file>
@@ -83,7 +81,7 @@ VAR
PROCEDURE syscall (ptr: INTEGER);
VAR
fn, r: INTEGER;
fn, r, n: INTEGER;
proc2: PROCEDURE (a, b: INTEGER): INTEGER;
proc3: PROCEDURE (a, b, c: INTEGER): INTEGER;
@@ -120,8 +118,9 @@ BEGIN
r := proc2(GetInt(ptr, 1), GetInt(ptr, 2))
| 2:
n := GetInt(ptr, 1);
SYSTEM.PUT(SYSTEM.ADR(proc3), SYSTEM.ADR(HOST.GetArg));
r := proc3(GetInt(ptr, 1) + 2, GetInt(ptr, 2), GetInt(ptr, 3))
r := proc3(n - ORD(n = 0) + 2, GetInt(ptr, 2), GetInt(ptr, 3))
| 3:
SYSTEM.PUT(SYSTEM.ADR(proc4), SYSTEM.ADR(HOST.FileRead));
+12 -10
View File
@@ -4,31 +4,33 @@
Использование
Скомпилировать исполнитель/дизассемблер в \tools\RVMxI.ob07 (для Windows32/64 Console):
Скомпилировать исполнитель/дизассемблер в .\tools\RVMxI.ob07
для Windows32/64 Console или Linux32/64:
Compiler.exe .\tools\RVMxI.ob07 win32con -nochk a -out RVM32I.exe
Compiler.exe .\tools\RVMxI.ob07 win64con -nochk a -out RVM64I.exe
Compiler.exe .\tools\RVMxI.ob07 win32con -nochk a -out RVMxI.exe
Compiler.exe .\tools\RVMxI.ob07 win64con -nochk a -out RVMxI.exe
Compiler ./tools/RVMxI.ob07 linux32exe -nochk a -out RVMxI
Compiler ./tools/RVMxI.ob07 linux64exe -nochk a -out RVMxI
Будет создан файл "RVM32I.exe" и/или "RVM64I.exe".
Будет создан файл "RVMxI.exe" и/или "RVMxI".
Компилировать программу в байт-код RVMxI:
Compiler.exe program.ob07 rvm32i [-ram size]
Compiler.exe program.ob07 rvm64i [-ram size]
Compiler.exe program.ob07 rvm32i [-ram size] [-def host_linux]
Compiler.exe program.ob07 rvm64i [-ram size] [-def host_linux]
-ram size -- установить размер оперативной памяти для программы в килобайтах 32768..262144
(32..256 Мбайт), по умолчанию 32768 (32 Мбайт)
-def host_linux -- если байт-код будет исполняться на Linux (по умолчанию -- Windows)
Будет создан файл "program.bin".
Выпонить программу:
RVM32I.exe program.bin -run
RVM64I.exe program.bin -run
RVMxI.exe program.bin -run <параметры>
Дизассемблировать программу:
RVM32I.exe program.bin -dis program.txt
RVM64I.exe program.bin -dis program.txt
RVMxI.exe program.bin -dis program.txt
Будет создан файл "program.txt".
---------------------------------------------------------------------------------------------------