From b78c6218299523e0861b66bb5a3da939a4860d4f Mon Sep 17 00:00:00 2001 From: ydah <13041216+ydah@users.noreply.github.com> Date: Fri, 17 Nov 2023 00:25:34 +0900 Subject: [PATCH] Change lexer regex to be simpler --- lib/lrama/lexer.rb | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/lrama/lexer.rb b/lib/lrama/lexer.rb index a76bb233..ccddd7e0 100644 --- a/lib/lrama/lexer.rb +++ b/lib/lrama/lexer.rb @@ -71,8 +71,7 @@ def lex_token # noop when @scanner.scan(/\/\*/) lex_comment - when @scanner.scan(/\/\//) - @scanner.scan_until(/\n/) + when @scanner.scan(/\/\/.*?\n/) newline else break @@ -97,8 +96,8 @@ def lex_token return [:CHARACTER, Lrama::Lexer::Token::Char.new(s_value: @scanner.matched, location: location)] when @scanner.scan(/'\\\\'|'\\b'|'\\t'|'\\f'|'\\r'|'\\n'|'\\v'|'\\13'/) return [:CHARACTER, Lrama::Lexer::Token::Char.new(s_value: @scanner.matched, location: location)] - when @scanner.scan(/"/) - return [:STRING, %Q("#{@scanner.scan_until(/"/)})] + when @scanner.scan(/".*?"/) + return [:STRING, %Q(#{@scanner.matched})] when @scanner.scan(/\d+/) return [:INTEGER, Integer(@scanner.matched)] when @scanner.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)/) @@ -136,13 +135,11 @@ def lex_c_code when @scanner.scan(/\n/) code += @scanner.matched newline - when @scanner.scan(/"/) - matched = @scanner.scan_until(/"/) - code += %Q("#{matched}) - @line += matched.count("\n") - when @scanner.scan(/'/) - matched = @scanner.scan_until(/'/) - code += %Q('#{matched}) + when @scanner.scan(/".*?"/) + code += %Q(#{@scanner.matched}) + @line += @scanner.matched.count("\n") + when @scanner.scan(/'.*?'/) + code += %Q(#{@scanner.matched}) else code += @scanner.getch end