summaryrefslogtreecommitdiff
path: root/source3/aparser/main.awk
diff options
context:
space:
mode:
Diffstat (limited to 'source3/aparser/main.awk')
-rw-r--r--source3/aparser/main.awk63
1 files changed, 63 insertions, 0 deletions
diff --git a/source3/aparser/main.awk b/source3/aparser/main.awk
new file mode 100644
index 0000000000..c3e8c2539c
--- /dev/null
+++ b/source3/aparser/main.awk
@@ -0,0 +1,63 @@
+# the main program
+
+@include dump.awk
+@include parsetree.awk
+@include header.awk
+@include util.awk
+@include template.awk
+@include parsefn.awk
+@include harness.awk
+
+/^module/ {
+ start_module($2);
+ next;
+}
+
+/^test/ {
+ test=$2;
+ next;
+}
+
+/^struct.*\{/ {
+ start_struct($2);
+ next;
+}
+
+/^[ \t]*union.*\{/ {
+ start_union($2, $3);
+ next;
+}
+
+/^[ \t]*case.*;/ {
+ split($0,a,"[ \t;]*");
+ parse_case(a[3],a[4],a[5]);
+ next;
+}
+
+/^\};/ {
+ end_struct();
+ next;
+}
+
+/^[ \t]*\}/ {
+ end_union();
+ next;
+}
+
+/^[ \t]*\{.*\}.*;/ {
+ split($0,a,"[ \t;{}]*");
+ add_array(a[2], a[3], a[4]);
+ next;
+}
+
+/.*;/ {
+ split($0,a,"[ \t;]*");
+ add_elem(a[2], a[3]);
+}
+
+END {
+ dump_structs("debug.out");
+ produce_headers("prs_"module".h");
+ produce_parsers("prs_"module".c");
+ produce_harness("test.h");
+}