module Tnql

grammar Age
  rule age
    space age:(fuzzy_age / exact_age) <Nodes::AgeNode>
  end

  rule exact_age
    [0-9] 1..3 <Nodes::ExactAgeNode>
  end

  rule fuzzy_age
    'between' space start:exact_age space 'and' space finish:exact_age <Nodes::FuzzyAgeNode>
  end

  rule with_age_at_diagnosis
    were_keyword aged_keyword age <Nodes::AgeAtDiagnosisNode>
  end

  rule with_death_date
    died_keyword fuzzy_date <Nodes::DeathDateNode>
  end

  rule with_birth_date
    were_keyword born_keyword fuzzy_date <Nodes::BirthDateNode>
  end

  rule age_group
    space group:(ctya / paediatric / teenage / young_adult) word_break
  end

  rule ctya
    'ctya' <Nodes::CtyaNode>
  end

  rule paediatric
    'paediatric' <Nodes::PaediatricNode>
  end

  rule teenage
    'teenage' <Nodes::TeenageNode>
  end

  rule young_adult
    'young' space 'adult' <Nodes::YoungAdultNode>
  end

  rule aged_keyword
    space 'aged' word_break
  end

  rule died_keyword
    space 'died' word_break
  end

  rule were_keyword
    space 'were' word_break
  end

  rule born_keyword
    space 'born' word_break
  end
end

end