Align Rust template with D template
This commit is contained in:
parent
e06cf11e9e
commit
7d42ef44c2
@ -446,7 +446,7 @@ struct lexer_match_info_t {
|
|||||||
/** Input text position delta to next code point after token end. */
|
/** Input text position delta to next code point after token end. */
|
||||||
delta_position: <%= @grammar.prefix %>position_t,
|
delta_position: <%= @grammar.prefix %>position_t,
|
||||||
/** Accepting lexer state from the match (state ID, or INVALID). */
|
/** Accepting lexer state from the match (state ID, or INVALID). */
|
||||||
accepting_state: <%= get_type_for(@lexer.state_table.size) %>,
|
accepting_state: lexer_state_id_t,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Lexer transition table. */
|
/** Lexer transition table. */
|
||||||
@ -500,6 +500,11 @@ fn lexer_user_code(context: &mut <%= @grammar.prefix %>context_t,
|
|||||||
* Check if there is a transition from the current lexer state to another
|
* Check if there is a transition from the current lexer state to another
|
||||||
* based on the given input code point.
|
* based on the given input code point.
|
||||||
*
|
*
|
||||||
|
* @param current_state
|
||||||
|
* Current lexer state.
|
||||||
|
* @param code_point
|
||||||
|
* Input code point.
|
||||||
|
*
|
||||||
* @return Lexer state to transition to, or INVALID_LEXER_STATE_ID if none.
|
* @return Lexer state to transition to, or INVALID_LEXER_STATE_ID if none.
|
||||||
*/
|
*/
|
||||||
fn check_lexer_transition(current_state: u32, code_point: u32) -> lexer_state_id_t {
|
fn check_lexer_transition(current_state: u32, code_point: u32) -> lexer_state_id_t {
|
||||||
@ -515,6 +520,24 @@ fn check_lexer_transition(current_state: u32, code_point: u32) -> lexer_state_id
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the longest lexer pattern match at the current position.
|
* Find the longest lexer pattern match at the current position.
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* Lexer/parser context structure.
|
||||||
|
* @param[out] out_match_info
|
||||||
|
* The longest match information is stored here if the return value is
|
||||||
|
* P_SUCCESS or P_DECODE_ERROR.
|
||||||
|
* @param[out] out_unexpected_input_length
|
||||||
|
* The unexpected input length is stored here if the return value is
|
||||||
|
* P_UNEXPECTED_INPUT.
|
||||||
|
*
|
||||||
|
* @reval P_SUCCESS
|
||||||
|
* A token was successfully lexed.
|
||||||
|
* @reval P_DECODE_ERROR
|
||||||
|
* The decoder encountered invalid text encoding.
|
||||||
|
* @reval P_UNEXPECTED_INPUT
|
||||||
|
* Input text does not match any lexer pattern.
|
||||||
|
* @retval P_EOF
|
||||||
|
* The end of the text input was reached.
|
||||||
*/
|
*/
|
||||||
fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
||||||
out_match_info: &mut lexer_match_info_t, out_unexpected_input_length: &mut usize) -> usize {
|
out_match_info: &mut lexer_match_info_t, out_unexpected_input_length: &mut usize) -> usize {
|
||||||
@ -544,7 +567,7 @@ fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
|||||||
}
|
}
|
||||||
current_state = transition_state as u32;
|
current_state = transition_state as u32;
|
||||||
if lexer_state_table[current_state as usize].accepts {
|
if lexer_state_table[current_state as usize].accepts {
|
||||||
attempt_match.accepting_state = current_state as <%= get_type_for(@lexer.state_table.size) %>;
|
attempt_match.accepting_state = current_state as lexer_state_id_t;
|
||||||
longest_match = attempt_match;
|
longest_match = attempt_match;
|
||||||
}
|
}
|
||||||
} else if longest_match.length > 0 {
|
} else if longest_match.length > 0 {
|
||||||
@ -561,6 +584,7 @@ fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
|||||||
*out_match_info = longest_match;
|
*out_match_info = longest_match;
|
||||||
return P_SUCCESS;
|
return P_SUCCESS;
|
||||||
} else if attempt_match.length != 0 {
|
} else if attempt_match.length != 0 {
|
||||||
|
/* There is a partial match - error! */
|
||||||
*out_unexpected_input_length = attempt_match.length;
|
*out_unexpected_input_length = attempt_match.length;
|
||||||
return P_UNEXPECTED_INPUT;
|
return P_UNEXPECTED_INPUT;
|
||||||
} else {
|
} else {
|
||||||
@ -568,6 +592,9 @@ fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
P_DECODE_ERROR => {
|
P_DECODE_ERROR => {
|
||||||
|
/* If we see a decode error, we may be partially in the middle of
|
||||||
|
* matching a pattern, so return the attempted match info so that
|
||||||
|
* the input text position can be updated. */
|
||||||
*out_match_info = attempt_match;
|
*out_match_info = attempt_match;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -580,6 +607,23 @@ fn find_longest_match(context: &<%= @grammar.prefix %>context_t,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to lex the next token in the input stream.
|
* Attempt to lex the next token in the input stream.
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* Lexer/parser context structure.
|
||||||
|
* @param[out] out_token_info
|
||||||
|
* The lexed token information is stored here if the return value is
|
||||||
|
* P_SUCCESS.
|
||||||
|
*
|
||||||
|
* @reval P_SUCCESS
|
||||||
|
* A token was successfully lexed.
|
||||||
|
* @reval P_DECODE_ERROR
|
||||||
|
* The decoder encountered invalid text encoding.
|
||||||
|
* @reval P_UNEXPECTED_INPUT
|
||||||
|
* Input text does not match any lexer pattern.
|
||||||
|
* @retval P_DROP
|
||||||
|
* A drop pattern was matched so the lexer should continue.
|
||||||
|
* @retval P_USER_TERMINATED
|
||||||
|
* User code has requested to terminate the lexer.
|
||||||
*/
|
*/
|
||||||
fn attempt_lex_token(context: &mut <%= @grammar.prefix %>context_t, out_token_info: &mut <%= @grammar.prefix %>token_info_t) -> usize {
|
fn attempt_lex_token(context: &mut <%= @grammar.prefix %>context_t, out_token_info: &mut <%= @grammar.prefix %>token_info_t) -> usize {
|
||||||
let mut token_info = <%= @grammar.prefix %>token_info_t::default();
|
let mut token_info = <%= @grammar.prefix %>token_info_t::default();
|
||||||
@ -673,7 +717,7 @@ struct shift_t {
|
|||||||
/** Token or rule set ID. */
|
/** Token or rule set ID. */
|
||||||
symbol_id: <%= get_type_for(@parser.rule_sets.map(&:last).map(&:id).max) %>,
|
symbol_id: <%= get_type_for(@parser.rule_sets.map(&:last).map(&:id).max) %>,
|
||||||
/** Parser state to shift to. */
|
/** Parser state to shift to. */
|
||||||
state_id: <%= get_type_for(@parser.state_table.size) %>,
|
state_id: lexer_state_id_t,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Reduce table entry. */
|
/** Reduce table entry. */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user