Skip to content

Commit

Permalink
Update parser
Browse files Browse the repository at this point in the history
  • Loading branch information
junk0612 committed Sep 19, 2023
1 parent bc6ea34 commit acf5589
Show file tree
Hide file tree
Showing 4 changed files with 378 additions and 325 deletions.
13 changes: 10 additions & 3 deletions lib/lrama/grammar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -318,13 +318,13 @@ def extract_references
start = scanner.pos
case
when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?\$/) # $$, $<long>$
tag = scanner[1] ? create_token(Token::Tag, scanner[1], line, str.length) : nil
tag = scanner[1] ? Lrama::Lexer::Token.new(type: Lrama::Lexer::Token::Tag, s_value: scanner[1]) : nil
references << [:dollar, "$", tag, start, scanner.pos - 1]
when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?(\d+)/) # $1, $2, $<long>1
tag = scanner[1] ? create_token(Token::Tag, scanner[1], line, str.length) : nil
tag = scanner[1] ? Lrama::Lexer::Token.new(type: Lrama::Lexer::Token::Tag, s_value: scanner[1]) : nil
references << [:dollar, Integer(scanner[2]), tag, start, scanner.pos - 1]
when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?([a-zA-Z_.][-a-zA-Z0-9_.]*)/) # $foo, $expr, $<long>program
tag = scanner[1] ? create_token(Token::Tag, scanner[1], line, str.length) : nil
tag = scanner[1] ? Lrama::Lexer::Token.new(type: Lrama::Lexer::Token::Tag, s_value: scanner[1]) : nil
references << [:dollar, scanner[2], tag, start, scanner.pos - 1]
when scanner.scan(/@\$/) # @$
references << [:at, "$", nil, start, scanner.pos - 1]
Expand All @@ -341,6 +341,13 @@ def extract_references
end
end

def create_token(type, s_value, line, column)
t = Token.new(type: type, s_value: s_value)
t.line = line
t.column = column

return t
end
private

def find_nterm_by_id!(id)
Expand Down
2 changes: 1 addition & 1 deletion lib/lrama/new_lexer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def lex_token
return [:STRING, @scanner.scan_until(/"/)[0..-2]]
when @scanner.scan(/\d+/)
return [:INTEGER, @scanner.matched]
when @scanner.scan(/([a-zA-Z_.][-a-zA-Z0-9_.()]*)/)
when @scanner.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)/)
return [:IDENTIFIER, @scanner.matched]
else
raise
Expand Down
Loading

0 comments on commit acf5589

Please sign in to comment.