module Canql
grammar Dates rule fuzzy_date date:(between_dates / on_dates) word_break <Nodes::FuzzyDateNode> end rule on_dates space ('on' / 'in') space date_fragment <Nodes::SpecificDateNode> end rule between_dates space 'between' space start:date_fragment space 'and' space finish:date_fragment <Nodes::FragmentedDateRangeNode> end rule date_fragment fragment:(daterange / year_quarter / chronic_date) word_break <Nodes::DateFragmentNode> end rule daterange day_or_month? day_or_month? year <Nodes::DateRangeNode> end rule day_or_month [0-9] 1..2 ('.' / '/') end rule year [0-9] 4..4 end rule year_quarter 'q' [1-4] space year <Nodes::YearQuarterNode> end rule chronic_date (!(space ('and' / 'at' / 'with' / 'who')) .)+ <Nodes::ChronicDateNode> end end
end