update: update stuff in parser/src/parser/

This commit is contained in:
maix0 2024-09-13 14:20:54 +00:00
parent 589189c90d
commit 0c81df4b0a
4 changed files with 41 additions and 34 deletions

View file

@ -6,57 +6,65 @@
/* 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 */
/* Updated: 2024/09/13 14:14:07 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "parser/inner/parser_inner.h"
void ts_parser__external_scanner_create(TSParser *self)
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)
void ts_parser__external_scanner_destroy(TSParser *self)
{
if (self->external_scanner_payload != NULL)
{
self->language->external_scanner.destroy(self->external_scanner_payload);
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 ts_parser__external_scanner_serialize(TSParser *self)
{
t_u32 length;
t_u32 length;
length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer);
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;
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)
void ts_parser__external_scanner_deserialize(TSParser *self,
t_subtree external_token)
{
const t_u8 *data;
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);
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);
self->language->external_scanner.deserialize(self->external_scanner_payload,
data, length);
}
bool ts_parser__external_scanner_scan(TSParser *self, TSStateId external_lex_state)
bool ts_parser__external_scanner_scan(TSParser *self,
TSStateId external_lex_state)
{
const bool *valid_external_tokens;
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);
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));
}

View file

@ -6,15 +6,15 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/10 13:56:13 by maiboyer #+# #+# */
/* Updated: 2024/09/11 16:43:43 by maiboyer ### ########.fr */
/* Updated: 2024/09/13 14:12:29 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#include "parser/inner/parser_inner.h"
TSParser *ts_parser_new(TSLanguage *language)
TSParser *ts_parser_new(TSLanguage *language)
{
TSParser *self;
TSParser *self;
self = mem_alloc(sizeof(*self));
ts_lexer_init(&self->lexer);
@ -25,13 +25,13 @@ TSParser *ts_parser_new(TSLanguage *language)
self->has_scanner_error = false;
self->external_scanner_payload = NULL;
self->operation_count = 0;
return self;
return (self);
}
void ts_parser_delete(TSParser *self)
void ts_parser_delete(TSParser *self)
{
if (!self)
return;
return ;
ts_parser_reset(self);
self->language = NULL;
ts_stack_delete(self->stack);
@ -42,7 +42,7 @@ void ts_parser_delete(TSParser *self)
mem_free(self);
}
void ts_parser_reset(TSParser *self)
void ts_parser_reset(TSParser *self)
{
ts_parser__external_scanner_destroy(self);
ts_lexer_reset(&self->lexer, length_zero());

View file

@ -6,7 +6,7 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/13 13:49:37 by maiboyer #+# #+# */
/* Updated: 2024/09/13 13:49:45 by maiboyer ### ########.fr */
/* Updated: 2024/09/13 14:19:20 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
@ -37,9 +37,6 @@ TSTree *ts_parser_parse_string(TSParser *self, t_const_str string,
t_string_input input;
input = (t_string_input){(const t_u8 *)string, length};
return (ts_parser_parse(self,
(TSInput){
&input,
ts_string_input_read,
}));
return (ts_parser_parse(self, \
(TSInput){&input, ts_string_input_read}));
}

View file

@ -6,7 +6,7 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/13 13:55:07 by maiboyer #+# #+# */
/* Updated: 2024/09/13 13:55:14 by maiboyer ### ########.fr */
/* Updated: 2024/09/13 14:09:10 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
@ -31,9 +31,11 @@ bool ts_parser__select_tree(TSParser *self, t_subtree left, t_subtree right)
return (true);
if (ts_subtree_error_cost(left) < ts_subtree_error_cost(right))
return (false);
if (ts_subtree_dynamic_precedence(right) > ts_subtree_dynamic_precedence(left))
if (ts_subtree_dynamic_precedence(right) > \
ts_subtree_dynamic_precedence(left))
return (true);
if (ts_subtree_dynamic_precedence(left) > ts_subtree_dynamic_precedence(right))
if (ts_subtree_dynamic_precedence(left) > \
ts_subtree_dynamic_precedence(right))
return (false);
if (ts_subtree_error_cost(left) > 0)
return (true);