summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-08-09 09:29:45 +0200
committerkdx <kikoodx@paranoici.org>2023-08-09 09:29:45 +0200
commit11163111e51dc9d08b027fba43f7852b0e3df4d0 (patch)
treeae5a6635be262615d1549fd76a0202a26dea34cb
downloadregem-11163111e51dc9d08b027fba43f7852b0e3df4d0.tar.gz
basic regex
-rw-r--r--.gitignore1
-rw-r--r--main.golem5
-rw-r--r--regem.golem39
-rwxr-xr-xrun.sh6
4 files changed, 51 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ceeb05b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/tmp
diff --git a/main.golem b/main.golem
new file mode 100644
index 0000000..8758f85
--- /dev/null
+++ b/main.golem
@@ -0,0 +1,5 @@
+main() {
+ local size;
+ dbg regem("bonsoir", "^b.n..ir$", &size);
+ dbg size;
+}
diff --git a/regem.golem b/regem.golem
new file mode 100644
index 0000000..1d66d0b
--- /dev/null
+++ b/regem.golem
@@ -0,0 +1,39 @@
+_regem_match(s, ex, out_size) {
+ local size = 0;
+
+ loop {
+ if ([s] == 0 | [ex] == 0) {
+ if out_size
+ [out_size] = size;
+ return ([ex] == 0 | [ex] == '$');
+ }
+
+ if ([ex] == '$')
+ return 0;
+ else if ([ex] == '.')
+ ;
+ else if ([s] != [ex])
+ return 0;
+
+ s++;
+ ex++;
+ size++;
+ }
+}
+
+regem(s, ex, out_size) {
+ local match;
+ local begin = ([ex] == '^');
+
+ if begin
+ ex++;
+
+ loop {
+ match = _regem_match(s, ex, out_size);
+ if match
+ return s;
+ s++;
+ if (begin | [s] == 0)
+ return 0;
+ }
+}
diff --git a/run.sh b/run.sh
new file mode 100755
index 0000000..99ac605
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+mkdir -p tmp
+cat main.golem regem.golem >tmp/golem
+golemc tmp/golem >tmp/asm
+orgaasm tmp/asm tmp/rom
+orgaemu tmp/rom