mirror of
https://github.com/uutils/awk.git
synced 2026-06-10 16:15:04 -07:00
lexer: resolve small regex ambiguity
This commit is contained in:
+9
-4
@@ -139,7 +139,7 @@ pub enum Token<'a> {
|
||||
Minus,
|
||||
#[token("*", accept_expression)]
|
||||
Star,
|
||||
#[token("/", parse_regex_or_slash)]
|
||||
#[token("/", parse_regex_or_op)]
|
||||
Slash,
|
||||
/// Not generated by Logos directly.
|
||||
Regex(Slice<'a>),
|
||||
@@ -160,7 +160,7 @@ pub enum Token<'a> {
|
||||
MinusAssign,
|
||||
#[token("*=", accept_expression)]
|
||||
StarAssign,
|
||||
#[token("/=", accept_expression)]
|
||||
/// Not generated by Logos directly.
|
||||
SlashAssign,
|
||||
#[token("%=", accept_expression)]
|
||||
PercentAssign,
|
||||
@@ -313,7 +313,7 @@ fn parse_string<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result<Slice<'a>>
|
||||
parse_content::<false, '"'>(lex)
|
||||
}
|
||||
|
||||
fn parse_regex_or_slash<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result<Token<'a>> {
|
||||
fn parse_regex_or_op<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result<Token<'a>> {
|
||||
match lex.extras.ctx {
|
||||
Context::AcceptExpression => {
|
||||
accept_operator(lex);
|
||||
@@ -321,7 +321,12 @@ fn parse_regex_or_slash<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result<Tok
|
||||
}
|
||||
Context::AcceptOperator => {
|
||||
accept_expression(lex);
|
||||
Ok(Token::Slash)
|
||||
if lex.remainder().first() == Some(&b'=') {
|
||||
lex.bump(1);
|
||||
Ok(Token::SlashAssign)
|
||||
} else {
|
||||
Ok(Token::Slash)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user