Trying a c parser

This commit is contained in:
Devine Lu Linvega 2024-04-04 09:04:27 -07:00
parent 107f295d7e
commit e78bc6f54a
6 changed files with 107 additions and 7 deletions

22
.clang-format Normal file
View File

@ -0,0 +1,22 @@
AlignAfterOpenBracket: DontAlign
AlignEscapedNewlines: DontAlign
AlignOperands: DontAlign
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: TopLevel
BreakBeforeTernaryOperators: false
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces: WebKit
IndentCaseLabels: false
TabWidth: 4
IndentWidth: 4
ContinuationIndentWidth: 4
UseTab: ForContinuationAndIndentation
ColumnLimit: 0
ReflowComments: false
SortIncludes: false
SpaceBeforeParens: false

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
.DS*
*jpg~
*png~
*gif~
*bmp~
/bin
*io.bit
*.bak
/*-test
/screenshot-*.bmp
*snarf
*theme
*.[o0125678vqki]

26
makefile Normal file
View File

@ -0,0 +1,26 @@
RELEASE_flags=-DNDEBUG -O2 -g0 -s
DEBUG_flags=-std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined
.PHONY: all debug dest run test install uninstall format clean
all: dest bin/modal
dest:
@ mkdir -p bin
run: all
@ bin/modal test.modal
test: all
@ bin/modal -v
@ bin/modal test.modal
install: all
@ cp bin/modal ~/bin/
uninstall:
@ rm -f ~/bin/modal
format:
@ clang-format -i src/modal.c
clean:
@ rm -fr bin
bin/modal: src/modal.c
@ cc ${DEBUG_flags} ${CFLAGS} src/modal.c -o bin/modal

View File

@ -303,7 +303,7 @@ def run(rules, queue, limit=pow(2, 32)):
result, queue = operation(queue, rules, pattern, *parameters)
if result == True:
failures = 0
#print("<>: ", inspect(seek(queue, ["SRT"])))
print("<>: ", inspect(seek(queue, ["SRT"])))
#print("<>: ", inspect(queue))
#input()
steps = steps + 1

41
src/modal.c Normal file
View File

@ -0,0 +1,41 @@
#include <stdio.h>
static int
walk(FILE *f)
{
char c, token[0x40], *cptr = token;
while(f && fread(&c, 1, 1, f)) {
if(c < 0x21) {
*cptr++ = 0x00;
printf("> %s\n", token);
cptr = token;
} else if(cptr - token < 0x3f)
*cptr++ = c;
else
return printf("Token too long: %s\n", token);
}
*cptr++ = 0;
return 1;
}
static int
eval(char *path)
{
FILE *f;
if(!(f = fopen(path, "r")))
return !printf("Invalid file: %s\n", path);
walk(f);
fclose(f);
return 1;
}
int
main(int argc, char **argv)
{
if(argc < 2)
return !printf("usage: modal [-v] source.modal\n");
if(argc < 3 && argv[1][0] == '-' && argv[1][1] == 'v')
return !printf("Modal - Modal Interpreter, 3 Apr 2024.\n");
return !eval(argv[1]);
}

View File

@ -1,7 +1,3 @@
define nil ((0))
define (pair (?x) (?y)) ((?x ?y))
define (first (?x ?y)) (?x)
define (second (?x ?y)) (?y)
define (quote ?x) (quote ?x)
<> (hello) (bye)
define test (first pair (A) (pair (B) (pair (C) nil)))
hello world