diff options
author | kdx <kikoodx@paranoici.org> | 2023-08-09 09:29:45 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-08-09 09:29:45 +0200 |
commit | 11163111e51dc9d08b027fba43f7852b0e3df4d0 (patch) | |
tree | ae5a6635be262615d1549fd76a0202a26dea34cb | |
download | regem-11163111e51dc9d08b027fba43f7852b0e3df4d0.tar.gz |
basic regex
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | main.golem | 5 | ||||
-rw-r--r-- | regem.golem | 39 | ||||
-rwxr-xr-x | run.sh | 6 |
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; + } +} @@ -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 |