summaryrefslogtreecommitdiffstats
path: root/llparse/src/api.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--llparse/src/api.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/llparse/src/api.ts b/llparse/src/api.ts
new file mode 100644
index 0000000..a34f5bc
--- /dev/null
+++ b/llparse/src/api.ts
@@ -0,0 +1,47 @@
+import * as frontend from 'llparse-frontend';
+
+import source = frontend.source;
+
+import { Compiler, ICompilerOptions, ICompilerResult } from './compiler';
+
+export { source, ICompilerOptions, ICompilerResult };
+
+// TODO(indutny): API for disabling/short-circuiting spans
+
+/**
+ * LLParse graph builder and compiler.
+ */
+export class LLParse extends source.Builder {
+ /**
+ * The prefix controls the names of methods and state struct in generated
+ * public C headers:
+ *
+ * ```c
+ * // state struct
+ * struct PREFIX_t {
+ * ...
+ * }
+ *
+ * int PREFIX_init(PREFIX_t* state);
+ * int PREFIX_execute(PREFIX_t* state, const char* p, const char* endp);
+ * ```
+ *
+ * @param prefix Prefix to be used when generating public API.
+ */
+ constructor(private readonly prefix: string = 'llparse') {
+ super();
+ }
+
+ /**
+ * Compile LLParse graph to the C code and C headers
+ *
+ * @param root Root node of the parse graph (see `.node()`)
+ * @param options Compiler options.
+ */
+ public build(root: source.node.Node, options: ICompilerOptions = {})
+ : ICompilerResult {
+ const c = new Compiler(this.prefix, options);
+
+ return c.compile(root, this.properties);
+ }
+}