aboutsummaryrefslogtreecommitdiff
path: root/include/cu/parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cu/parser.h')
-rw-r--r--include/cu/parser.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/cu/parser.h b/include/cu/parser.h
new file mode 100644
index 0000000..dfc2b6a
--- /dev/null
+++ b/include/cu/parser.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+
+#ifndef PARSER_H
+#define PARSER_H
+
+#include <stddef.h>
+#include <stdbool.h>
+#include <cu/ast.h>
+
+struct parser {
+ bool failed;
+ void *lexer;
+ size_t buf_offset;
+ const char *buf;
+ const char *fname;
+ size_t comment_nesting;
+ struct ast_node *tree;
+};
+
+#define YY_DECL int yylex(YYSTYPE *yylval, YYLTYPE *yylloc, \
+ yyscan_t yyscanner, struct parser *parser)
+
+#include <../gen/gen_parser.h>
+#ifndef FROM_LEXER
+#include <../gen/gen_lexer.h>
+#endif
+
+YY_DECL;
+
+struct parser *create_parser();
+void destroy_parser(struct parser *p);
+void parse(struct parser *p, const char *fname, const char *buf);
+int next_interesting_feature(YYSTYPE *yylval, YYLTYPE *yylloc,
+ void *scanner, struct parser *parser);
+
+struct src_loc to_src_loc(YYLTYPE *yylloc);
+
+void yyerror(YYLTYPE *yylloc, void *lexer, struct parser *parser,
+ const char *msg);
+
+long long match_escape(char c);
+const char *clone_string(const char *s);
+
+#endif /* PARSER_H */