Remove match_length lexer user code block for Rust
This commit is contained in:
parent
d596d47cef
commit
008ed49f66
@ -10,7 +10,7 @@
|
|||||||
`match_text` for every target language. It was previously named `match` for
|
`match_text` for every target language. It was previously named `match` for
|
||||||
C, C++, and D, and `match_` for Rust. Any lexer user code block which
|
C, C++, and D, and `match_` for Rust. Any lexer user code block which
|
||||||
references the matched text must be updated to use the new name. The
|
references the matched text must be updated to use the new name. The
|
||||||
`match_length` argument (C, C++, and Rust) is unchanged.
|
`match_length` argument (C and C++) is unchanged.
|
||||||
- Tree generation mode now stores all tree nodes in a compact arena owned by
|
- Tree generation mode now stores all tree nodes in a compact arena owned by
|
||||||
the parser context (a flat node array plus a shared child-link array).
|
the parser context (a flat node array plus a shared child-link array).
|
||||||
This replaces the previous design of one heap allocation per node with
|
This replaces the previous design of one heap allocation per node with
|
||||||
|
|||||||
@ -484,8 +484,6 @@ static lexer_mode_table: [lexer_mode_t; <%= @lexer.mode_table.size %>] = [
|
|||||||
* The ID of the user code block to execute.
|
* The ID of the user code block to execute.
|
||||||
* @param match_text
|
* @param match_text
|
||||||
* Matched text for this pattern.
|
* Matched text for this pattern.
|
||||||
* @param match_length
|
|
||||||
* Matched text length.
|
|
||||||
* @param out_token_info
|
* @param out_token_info
|
||||||
* Lexer token info in progress.
|
* Lexer token info in progress.
|
||||||
*
|
*
|
||||||
@ -494,7 +492,7 @@ static lexer_mode_table: [lexer_mode_t; <%= @lexer.mode_table.size %>] = [
|
|||||||
*/
|
*/
|
||||||
fn lexer_user_code(context: &mut <%= @grammar.prefix %>context_t,
|
fn lexer_user_code(context: &mut <%= @grammar.prefix %>context_t,
|
||||||
code_id: <%= get_type_for(user_code_id_count) %>, match_text: &[u8],
|
code_id: <%= get_type_for(user_code_id_count) %>, match_text: &[u8],
|
||||||
match_length: usize, out_token_info: &mut <%= @grammar.prefix %>token_info_t) -> <%= @grammar.prefix %>token_t {
|
out_token_info: &mut <%= @grammar.prefix %>token_info_t) -> <%= @grammar.prefix %>token_t {
|
||||||
match code_id {
|
match code_id {
|
||||||
<% @grammar.patterns.each do |pattern| %>
|
<% @grammar.patterns.each do |pattern| %>
|
||||||
<% if pattern.code_id %>
|
<% if pattern.code_id %>
|
||||||
@ -668,7 +666,7 @@ fn attempt_lex_token(context: &mut <%= @grammar.prefix %>context_t, out_token_in
|
|||||||
let match_start = context.input_index;
|
let match_start = context.input_index;
|
||||||
let match_slice = context.input[match_start..(match_start + match_info.length)].to_vec();
|
let match_slice = context.input[match_start..(match_start + match_info.length)].to_vec();
|
||||||
let user_code_token = lexer_user_code(context,
|
let user_code_token = lexer_user_code(context,
|
||||||
lexer_state_table[match_info.accepting_state as usize].code_id, &match_slice, match_info.length, &mut token_info);
|
lexer_state_table[match_info.accepting_state as usize].code_id, &match_slice, &mut token_info);
|
||||||
/* A TERMINATE_TOKEN_ID return code from lexer_user_code() means
|
/* A TERMINATE_TOKEN_ID return code from lexer_user_code() means
|
||||||
* that the user code is requesting to terminate the lexer. */
|
* that the user code is requesting to terminate the lexer. */
|
||||||
if user_code_token == TERMINATE_TOKEN_ID {
|
if user_code_token == TERMINATE_TOKEN_ID {
|
||||||
|
|||||||
@ -249,7 +249,6 @@ token integer /\d+/ <<
|
|||||||
The lexer code block is passed the following arguments:
|
The lexer code block is passed the following arguments:
|
||||||
|
|
||||||
* `match_text` (`&[u8]`) - a slice containing the text matched by the lexer pattern.
|
* `match_text` (`&[u8]`) - a slice containing the text matched by the lexer pattern.
|
||||||
* `match_length` (`usize`) - length of the matched text.
|
|
||||||
|
|
||||||
The matched text is a byte slice rather than a string; use
|
The matched text is a byte slice rather than a string; use
|
||||||
`std::str::from_utf8()` or `String::from_utf8_lossy()` to view it as a string.
|
`std::str::from_utf8()` or `String::from_utf8_lossy()` to view it as a string.
|
||||||
|
|||||||
@ -1124,7 +1124,7 @@ EOF
|
|||||||
write_grammar <<EOF
|
write_grammar <<EOF
|
||||||
ptype u64;
|
ptype u64;
|
||||||
token word /[a-z]+/ <<
|
token word /[a-z]+/ <<
|
||||||
$$ = match_length as u64;
|
$$ = match_text.len() as u64;
|
||||||
>>
|
>>
|
||||||
Start -> word <<
|
Start -> word <<
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user