update: update stuff in parser/src/parser/
This commit is contained in:
parent
589189c90d
commit
0c81df4b0a
4 changed files with 41 additions and 34 deletions
|
|
@ -6,57 +6,65 @@
|
||||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/11 16:44:11 by maiboyer #+# #+# */
|
/* 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"
|
#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();
|
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)
|
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;
|
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)
|
if (length > TREE_SITTER_SERIALIZATION_BUFFER_SIZE)
|
||||||
me_abort("assertion failed in " __FILE__ " `length > "
|
me_abort("assertion failed in " __FILE__ " `length > " \
|
||||||
"TREE_SITTER_SERIALIZATION_BUFFER_SIZE`");
|
"TREE_SITTER_SERIALIZATION_BUFFER_SIZE`");
|
||||||
return length;
|
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;
|
t_u32 length;
|
||||||
|
|
||||||
data = NULL;
|
data = NULL;
|
||||||
length = 0;
|
length = 0;
|
||||||
if (external_token)
|
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;
|
length = external_token->external_scanner_state.length;
|
||||||
printf("HERE\n");
|
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);
|
valid_external_tokens = ts_language_enabled_external_tokens(self->language,
|
||||||
return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens);
|
external_lex_state);
|
||||||
|
return (self->language->external_scanner.scan(\
|
||||||
|
self->external_scanner_payload, &self->lexer.data, valid_external_tokens));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,15 @@
|
||||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/10 13:56:13 by maiboyer #+# #+# */
|
/* 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"
|
#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));
|
self = mem_alloc(sizeof(*self));
|
||||||
ts_lexer_init(&self->lexer);
|
ts_lexer_init(&self->lexer);
|
||||||
|
|
@ -25,13 +25,13 @@ TSParser *ts_parser_new(TSLanguage *language)
|
||||||
self->has_scanner_error = false;
|
self->has_scanner_error = false;
|
||||||
self->external_scanner_payload = NULL;
|
self->external_scanner_payload = NULL;
|
||||||
self->operation_count = 0;
|
self->operation_count = 0;
|
||||||
return self;
|
return (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ts_parser_delete(TSParser *self)
|
void ts_parser_delete(TSParser *self)
|
||||||
{
|
{
|
||||||
if (!self)
|
if (!self)
|
||||||
return;
|
return ;
|
||||||
ts_parser_reset(self);
|
ts_parser_reset(self);
|
||||||
self->language = NULL;
|
self->language = NULL;
|
||||||
ts_stack_delete(self->stack);
|
ts_stack_delete(self->stack);
|
||||||
|
|
@ -42,7 +42,7 @@ void ts_parser_delete(TSParser *self)
|
||||||
mem_free(self);
|
mem_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ts_parser_reset(TSParser *self)
|
void ts_parser_reset(TSParser *self)
|
||||||
{
|
{
|
||||||
ts_parser__external_scanner_destroy(self);
|
ts_parser__external_scanner_destroy(self);
|
||||||
ts_lexer_reset(&self->lexer, length_zero());
|
ts_lexer_reset(&self->lexer, length_zero());
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/13 13:49:37 by maiboyer #+# #+# */
|
/* 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;
|
t_string_input input;
|
||||||
|
|
||||||
input = (t_string_input){(const t_u8 *)string, length};
|
input = (t_string_input){(const t_u8 *)string, length};
|
||||||
return (ts_parser_parse(self,
|
return (ts_parser_parse(self, \
|
||||||
(TSInput){
|
(TSInput){&input, ts_string_input_read}));
|
||||||
&input,
|
|
||||||
ts_string_input_read,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/13 13:55:07 by maiboyer #+# #+# */
|
/* 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);
|
return (true);
|
||||||
if (ts_subtree_error_cost(left) < ts_subtree_error_cost(right))
|
if (ts_subtree_error_cost(left) < ts_subtree_error_cost(right))
|
||||||
return (false);
|
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);
|
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);
|
return (false);
|
||||||
if (ts_subtree_error_cost(left) > 0)
|
if (ts_subtree_error_cost(left) > 0)
|
||||||
return (true);
|
return (true);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue