update: started to norme a bit more parser.c
This commit is contained in:
parent
86695aad14
commit
b264fae51a
9 changed files with 372 additions and 521 deletions
File diff suppressed because it is too large
Load diff
62
parser/src/parser/parser_external_scanner.c
Normal file
62
parser/src/parser/parser_external_scanner.c
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parser_external_scanner.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/09/11 16:44:11 by maiboyer #+# #+# */
|
||||
/* Updated: 2024/09/11 16:44:49 by maiboyer ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/inner/parser_inner.h"
|
||||
|
||||
void ts_parser__external_scanner_create(TSParser *self)
|
||||
{
|
||||
self->external_scanner_payload = self->language->external_scanner.create();
|
||||
}
|
||||
|
||||
void ts_parser__external_scanner_destroy(TSParser *self)
|
||||
{
|
||||
if (self->external_scanner_payload != NULL)
|
||||
{
|
||||
self->language->external_scanner.destroy(self->external_scanner_payload);
|
||||
self->external_scanner_payload = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
t_u32 ts_parser__external_scanner_serialize(TSParser *self)
|
||||
{
|
||||
t_u32 length;
|
||||
|
||||
length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer);
|
||||
if (length > TREE_SITTER_SERIALIZATION_BUFFER_SIZE)
|
||||
me_abort("assertion failed in " __FILE__ " `length > "
|
||||
"TREE_SITTER_SERIALIZATION_BUFFER_SIZE`");
|
||||
return length;
|
||||
}
|
||||
|
||||
void ts_parser__external_scanner_deserialize(TSParser *self, t_subtree external_token)
|
||||
{
|
||||
const t_u8 *data;
|
||||
t_u32 length;
|
||||
|
||||
data = NULL;
|
||||
length = 0;
|
||||
if (external_token)
|
||||
{
|
||||
data = ts_external_scanner_state_data(&external_token->external_scanner_state);
|
||||
length = external_token->external_scanner_state.length;
|
||||
printf("HERE\n");
|
||||
}
|
||||
self->language->external_scanner.deserialize(self->external_scanner_payload, data, length);
|
||||
}
|
||||
|
||||
bool ts_parser__external_scanner_scan(TSParser *self, TSStateId external_lex_state)
|
||||
{
|
||||
const bool *valid_external_tokens;
|
||||
|
||||
valid_external_tokens = ts_language_enabled_external_tokens(self->language, external_lex_state);
|
||||
return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens);
|
||||
}
|
||||
|
|
@ -6,8 +6,52 @@
|
|||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/09/10 13:56:13 by maiboyer #+# #+# */
|
||||
/* Updated: 2024/09/10 13:56:30 by maiboyer ### ########.fr */
|
||||
/* Updated: 2024/09/11 16:43:43 by maiboyer ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "parser/inner/parser_inner.h"
|
||||
|
||||
TSParser *ts_parser_new(TSLanguage *language)
|
||||
{
|
||||
TSParser *self;
|
||||
|
||||
self = mem_alloc(sizeof(*self));
|
||||
ts_lexer_init(&self->lexer);
|
||||
self->reduce_actions = vec_reduce_action_new(4, NULL);
|
||||
self->stack = ts_stack_new();
|
||||
self->finished_tree = NULL;
|
||||
self->language = language;
|
||||
self->has_scanner_error = false;
|
||||
self->external_scanner_payload = NULL;
|
||||
self->operation_count = 0;
|
||||
return self;
|
||||
}
|
||||
|
||||
void ts_parser_delete(TSParser *self)
|
||||
{
|
||||
if (!self)
|
||||
return;
|
||||
ts_parser_reset(self);
|
||||
self->language = NULL;
|
||||
ts_stack_delete(self->stack);
|
||||
vec_reduce_action_free(self->reduce_actions);
|
||||
array_delete(&self->trailing_extras);
|
||||
array_delete(&self->trailing_extras2);
|
||||
array_delete(&self->scratch_trees);
|
||||
mem_free(self);
|
||||
}
|
||||
|
||||
void ts_parser_reset(TSParser *self)
|
||||
{
|
||||
ts_parser__external_scanner_destroy(self);
|
||||
ts_lexer_reset(&self->lexer, length_zero());
|
||||
ts_stack_clear(self->stack);
|
||||
if (self->finished_tree)
|
||||
{
|
||||
ts_subtree_release(self->finished_tree);
|
||||
self->finished_tree = NULL;
|
||||
}
|
||||
self->accept_count = 0;
|
||||
self->has_scanner_error = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue