A Nix language parser implemented in C (ragel + bison)
1#ifndef PARSER_NODE_H
2#define PARSER_NODE_H
3
4#include <stddef.h>
5#include "lexer.h"
6
7typedef enum {
8 APPLY_NODE,
9 ARG_NODE,
10 ARG_SET_NODE,
11 ASSERT_NODE,
12 ATTR_PATH_NODE,
13 BIND_NODE,
14 BINDS_NODE,
15 FLOAT_NODE,
16 FUNCTION_NODE,
17 ID_NODE,
18 I_STRING_NODE,
19 IF_NODE,
20 INHERIT_FROM_NODE,
21 INHERIT_LIST_NODE,
22 INHERIT_NODE,
23 INT_NODE,
24 INTERP_NODE,
25 LET_NODE,
26 LIST_NODE,
27 PARENS_NODE,
28 PATH_NODE,
29 REC_SET_NODE,
30 SELECT_NODE,
31 SELECT_OR_NODE,
32 SET_NODE,
33 STRING_NODE,
34 TEXT_NODE,
35 URI_NODE,
36 WITH_NODE,
37 OP_NODE
38} NodeType;
39
40typedef struct Node {
41 NodeType type;
42 int token_start;
43 int token_end;
44 int op; /* operator code for OP_NODE (ASCII or token id) */
45 struct Node **children;
46 size_t nchildren;
47 size_t cchildren;
48} Node;
49
50/* Produce a lisp-format string representation of the node using the
51 provided LexResult (for token text lookup). Caller must free result. */
52char *node_lisp_format(Node *n, LexResult *lr);
53
54/* Return canonical node type name used in legacy lisp format. */
55const char *node_type_name(NodeType t);
56
57#endif /* PARSER_NODE_H */