Files
old-parser/specification.rex

35 lines
1.2 KiB
Rexx
Raw Permalink Normal View History

2020-01-23 09:05:32 +01:00
class Query
macro
2020-01-23 17:46:58 +01:00
L_BRACKET \(
R_BRACKET \)
SPACE \ + # Space char
OPERATOR_OR (?i)\bor\b
OPERATOR_AND (?i)\band\b
OPERATOR_NOT (?i)\bnot\b
2020-01-23 17:46:58 +01:00
TERM_WITH_QUOTES "([^"]*)"
TERM_WITHOUT_QUOTES [a-zA-Z0-9-_]+
2020-01-23 17:46:58 +01:00
COLON \:
2020-01-23 09:05:32 +01:00
rule
2020-01-23 17:46:58 +01:00
{SPACE} # No action
{L_BRACKET} { return [:L_BRACKET, text] }
{R_BRACKET} { return [:R_BRACKET, text] }
{OPERATOR_OR} { return [:OPERATOR_OR, text] }
{OPERATOR_AND} { return [:OPERATOR_AND, text] }
{OPERATOR_NOT} { return [:OPERATOR_NOT, text] }
{TERM_WITH_QUOTES} { return [:TERM_WITH_QUOTES, text] }
{TERM_WITHOUT_QUOTES} { return [:TERM_WITHOUT_QUOTES, text] }
{COLON} { return [:COLON, text] }
2020-01-23 09:05:32 +01:00
inner
def tokenize(code)
scan_setup(code)
tokens = []
while token = next_token
tokens << token
end
tokens
end
end