From a40ef1434889babbd88c9d0c5913c70e96ac2774 Mon Sep 17 00:00:00 2001 From: "Konstantin Kirik (snegovick)" Date: Fri, 12 Dec 2025 03:51:07 +0300 Subject: Add simple parser for future shell-like lang --- sh9parser.m | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 sh9parser.m (limited to 'sh9parser.m') diff --git a/sh9parser.m b/sh9parser.m new file mode 100644 index 0000000..cbad2f6 --- /dev/null +++ b/sh9parser.m @@ -0,0 +1,28 @@ +Sh9Parser: module +{ +PATH: con "sh9parser.dis"; +DESCR: con "Mostly generic parser for sh9"; + +mk_tok: fn(start: int, line: int, tok: string, typ: string) : TokNode; +set_last_tok: fn(last_tok: ref TokNode, toks: list of ref TokNode): (TokNode, list of ref TokNode); +print_toks: fn(toks: array of ref TokNode); +print_toks_short: fn(toks: array of ref TokNode); +check_grammar_node_match: fn(toks: array of ref TokNode, gn: ref GrammarNode): int; +replace_toks: fn(src: array of ref TokNode, replace_start: int, replace_len: int, replace_with: array of ref TokNode): array of ref TokNode; +parse_toks: fn(toks: array of ref TokNode, g: array of ref GrammarNode): array of ref TokNode; + +TokNode: adt { + start: int; + line: int; + tok: string; + typ: string; +}; + +GrammarNode: adt { + expr: array of string; + transform: string; + + callback: ref fn(toks: array of ref TokNode); + print_expr: fn(gn: self ref GrammarNode); +}; +}; -- cgit v1.2.3