A Nix language parser implemented in C (ragel + bison)
at main 1.2 kB view raw
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 */