summaryrefslogtreecommitdiff
path: root/module/sh9parser.m
blob: 0807105eb499439549c4ce3f0e46f6c5278adb0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sh9Parser: module
{
PATH: con "/dis/lib/sh9parser.dis";
DESCR: con "Mostly generic parser for sh9";

mk_tok: fn(start: int, line: int, tok: string, typ: string) : ref TokNode;
set_last_tok: fn(last_tok: ref TokNode, toks: list of ref TokNode): (ref 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;
init:	fn();

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);
};
};