36 lines
1.2 KiB
Rexx
36 lines
1.2 KiB
Rexx
class Query
|
|
macro
|
|
L_BRACKET \(
|
|
R_BRACKET \)
|
|
SPACE \ + # Space char
|
|
OPERATOR_OR (?i)\bor\b
|
|
OPERATOR_AND (?i)\band\b
|
|
OPERATOR_NOT (?i)\bnot\b
|
|
TERM_WITH_QUOTES "([^"]*)"
|
|
TERM_WITHOUT_QUOTES [a-zA-Z0-9\-_]+
|
|
COLON \:
|
|
|
|
|
|
|
|
rule
|
|
{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] }
|
|
|
|
inner
|
|
def tokenize(code)
|
|
scan_setup(code)
|
|
tokens = []
|
|
while token = next_token
|
|
tokens << token
|
|
end
|
|
tokens
|
|
end
|
|
end
|