Something went wrong. Try again.
Kieran's opinionated (and probably slightly dumb) nix config
Something went wrong. Try again.
7.6 kB · 286 lines
C
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287#ifndef TREE_SITTER_PARSER_H_#define TREE_SITTER_PARSER_H_
#ifdef __cplusplusextern "C" {#endif
#include <stdbool.h>#include <stdint.h>#include <stdlib.h>
#define ts_builtin_sym_error ((TSSymbol)-1)#define ts_builtin_sym_end 0#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024
#ifndef TREE_SITTER_API_H_typedef uint16_t TSStateId;typedef uint16_t TSSymbol;typedef uint16_t TSFieldId;typedef struct TSLanguage TSLanguage;typedef struct TSLanguageMetadata { uint8_t major_version; uint8_t minor_version; uint8_t patch_version;} TSLanguageMetadata;#endif
typedef struct { TSFieldId field_id; uint8_t child_index; bool inherited;} TSFieldMapEntry;
// Used to index the field and supertype maps.typedef struct { uint16_t index; uint16_t length;} TSMapSlice;
typedef struct { bool visible; bool named; bool supertype;} TSSymbolMetadata;
typedef struct TSLexer TSLexer;
struct TSLexer { int32_t lookahead; TSSymbol result_symbol; void (*advance)(TSLexer *, bool); void (*mark_end)(TSLexer *); uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); void (*log)(const TSLexer *, const char *, ...);};
typedef enum { TSParseActionTypeShift, TSParseActionTypeReduce, TSParseActionTypeAccept, TSParseActionTypeRecover,} TSParseActionType;
typedef union { struct { uint8_t type; TSStateId state; bool extra; bool repetition; } shift; struct { uint8_t type; uint8_t child_count; TSSymbol symbol; int16_t dynamic_precedence; uint16_t production_id; } reduce; uint8_t type;} TSParseAction;
typedef struct { uint16_t lex_state; uint16_t external_lex_state;} TSLexMode;
typedef struct { uint16_t lex_state; uint16_t external_lex_state; uint16_t reserved_word_set_id;} TSLexerMode;
typedef union { TSParseAction action; struct { uint8_t count; bool reusable; } entry;} TSParseActionEntry;
typedef struct { int32_t start; int32_t end;} TSCharacterRange;
struct TSLanguage { uint32_t abi_version; uint32_t symbol_count; uint32_t alias_count; uint32_t token_count; uint32_t external_token_count; uint32_t state_count; uint32_t large_state_count; uint32_t production_id_count; uint32_t field_count; uint16_t max_alias_sequence_length; const uint16_t *parse_table; const uint16_t *small_parse_table; const uint32_t *small_parse_table_map; const TSParseActionEntry *parse_actions; const char * const *symbol_names; const char * const *field_names; const TSMapSlice *field_map_slices; const TSFieldMapEntry *field_map_entries; const TSSymbolMetadata *symbol_metadata; const TSSymbol *public_symbol_map; const uint16_t *alias_map; const TSSymbol *alias_sequences; const TSLexerMode *lex_modes; bool (*lex_fn)(TSLexer *, TSStateId); bool (*keyword_lex_fn)(TSLexer *, TSStateId); TSSymbol keyword_capture_token; struct { const bool *states; const TSSymbol *symbol_map; void *(*create)(void); void (*destroy)(void *); bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); unsigned (*serialize)(void *, char *); void (*deserialize)(void *, const char *, unsigned); } external_scanner; const TSStateId *primary_state_ids; const char *name; const TSSymbol *reserved_words; uint16_t max_reserved_word_set_size; uint32_t supertype_count; const TSSymbol *supertype_symbols; const TSMapSlice *supertype_map_slices; const TSSymbol *supertype_map_entries; TSLanguageMetadata metadata;};
static inline bool set_contains(const TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { uint32_t index = 0; uint32_t size = len - index; while (size > 1) { uint32_t half_size = size / 2; uint32_t mid_index = index + half_size; const TSCharacterRange *range = &ranges[mid_index]; if (lookahead >= range->start && lookahead <= range->end) { return true; } else if (lookahead > range->end) { index = mid_index; } size -= half_size; } const TSCharacterRange *range = &ranges[index]; return (lookahead >= range->start && lookahead <= range->end);}
/* * Lexer Macros */
#ifdef _MSC_VER#define UNUSED __pragma(warning(suppress : 4101))#else#define UNUSED __attribute__((unused))#endif
#define START_LEXER() \ bool result = false; \ bool skip = false; \ UNUSED \ bool eof = false; \ int32_t lookahead; \ goto start; \ next_state: \ lexer->advance(lexer, skip); \ start: \ skip = false; \ lookahead = lexer->lookahead;
#define ADVANCE(state_value) \ { \ state = state_value; \ goto next_state; \ }
#define ADVANCE_MAP(...) \ { \ static const uint16_t map[] = { __VA_ARGS__ }; \ for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ if (map[i] == lookahead) { \ state = map[i + 1]; \ goto next_state; \ } \ } \ }
#define SKIP(state_value) \ { \ skip = true; \ state = state_value; \ goto next_state; \ }
#define ACCEPT_TOKEN(symbol_value) \ result = true; \ lexer->result_symbol = symbol_value; \ lexer->mark_end(lexer);
#define END_STATE() return result;
/* * Parse Table Macros */
#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT)
#define STATE(id) id
#define ACTIONS(id) id
#define SHIFT(state_value) \ {{ \ .shift = { \ .type = TSParseActionTypeShift, \ .state = (state_value) \ } \ }}
#define SHIFT_REPEAT(state_value) \ {{ \ .shift = { \ .type = TSParseActionTypeShift, \ .state = (state_value), \ .repetition = true \ } \ }}
#define SHIFT_EXTRA() \ {{ \ .shift = { \ .type = TSParseActionTypeShift, \ .extra = true \ } \ }}
#define REDUCE(symbol_name, children, precedence, prod_id) \ {{ \ .reduce = { \ .type = TSParseActionTypeReduce, \ .symbol = symbol_name, \ .child_count = children, \ .dynamic_precedence = precedence, \ .production_id = prod_id \ }, \ }}
#define RECOVER() \ {{ \ .type = TSParseActionTypeRecover \ }}
#define ACCEPT_INPUT() \ {{ \ .type = TSParseActionTypeAccept \ }}
#ifdef __cplusplus}#endif
#endif // TREE_SITTER_PARSER_H_