taskwarrior/doc/misc/grammar.bnf
Paul Beckingham e046b37287 Grammar
- Almost complete grammar, with some 2.x enhancements.
2011-02-14 11:13:24 -05:00

241 lines
6.6 KiB
BNF

# This document defines the BNF grammar that will be supported in Taskwarrior
# 2.1.
# Commands (alphabetically)
command_add ::= "add" ws+ task-elements ;
command_annotate ::= "annotate" ws+ range ws+ words ;
command_append ::= "append" ws+ range ws+ words ;
command_burndown ::= "burndown.monthly" ws+ filter
| "burndown.weekly" ws+ filter
| "burndown.daily" ws+ filter
| "burndown.monthly"
| "burndown.weekly"
| "burndown.daily"
;
command_calendar ::= "calendar" ws+ "due" ws+ filter
| "calendar" ws+ "due"
| "calendar" ws+ "y" ws+ filter
| "calendar" ws+ "y"
| "calendar" ws+ year ws+ filter
| "calendar" ws+ year
| "calendar" ws+ year ws+ month ws+ filter
| "calendar" ws+ year ws+ month
| "calendar" ws+ month-name ws+ filter
| "calendar" ws+ month-name
| "calendar" ws+ filter
| "calendar"
;
command_colors ::= "colors" ws+ "legend"
| "colors" ws+ "sample"
| "colors"
;
command_config ::= "config" ws+ word ws+ words
| "config" ws+ word
;
command_count ::= "count" ws+ filter
| "count"
;
# TODO en-passant
command_delete ::= "delete" ws+ range ;
command_denotate ::= "denotate" ws+ range ws+ pattern ;
command_diagnostics ::= "diagnostics" ;
# TODO en-passant
command_done ::= "done" ws+ range ;
# TODO en-passant
command_duplicate ::= "duplicate" ws+ range ;
command_edit ::= "edit" ws+ range ;
command_ghistory ::= "ghistory.annual" ws+ filter
| "ghistory.monthly" ws+ filter
| "ghistory.weekly" ws+ filter
| "ghistory.daily" ws+ filter
| "ghistory.annual"
| "ghistory.monthly"
| "ghistory.weekly"
| "ghistory.daily"
;
command_help ::= "help" ;
command_history ::= "history.annual" ws+ filter
| "history.monthly" ws+ filter
| "history.weekly" ws+ filter
| "history.daily" ws+ filter
| "history.annual"
| "history.monthly"
| "history.weekly"
| "history.daily"
;
command_import ::= "import" ws+ file
| "import" ws+ "-"
;
command_info ::= "info" ws+ range
;
command_log ::= "log" ws+ task-elements ;
command_merge ::= "merge" ws+ url ;
command_prepend ::= "prepend" ws+ range ws+ words ;
command_projects ::= "projects" ws+ filter
| "projects"
;
command_pull ::= "pull" ws+ url ;
command_push ::= "push" ws+ url ;
command_shell ::= "shell" ;
command_show ::= "show" ws+ pattern
| "show"
;
command_start ::= "start" ws+ range
| "start"
;
command_stats ::= "statistics" ws+ filter
| "statistics"
;
command_stop ::= "stop" ws+ range
| "stop"
;
command_summary ::= "summary" ws+ filter
| "summary"
;
command_tags ::= "tags" ;
command_timesheet ::= "timesheet" ws+ digit
| "timesheet"
;
command_undo ::= "undo" ;
command_version ::= "version" ;
# command_report ::= report ws+ filter ;
# Helper Commands (alphabetically)
helper_query ::= "query" ws+ filter
| "query"
;
# Primitives
range ::= ;
id-equivalent ::= uuid | id ;
id ::= digit+ ;
uuid ::= ;
attribute ::= ;
modifier ::= ;
task-elements ::= task-element+ ;
task-element ::= attribute ws+
| tag ws+
| word ws+
;
filter ::= filter-elements+ ;
filter-elements ::= range
| pattern
| filter-attribute ;
filter-attribute ::= field modifier? ":" value? ;
modifier ::= ".above"
| ".after"
| ".any"
| ".before"
| ".below"
| ".contains"
| ".endswith"
| ".equals"
| ".has"
| ".hasnt"
| ".is"
| ".isnt"
| ".left"
| ".none"
| ".not"
| ".noword"
| ".over"
| ".right"
| ".startswith"
| ".under"
| ".word"
;
value ::= ;
year ::= digit digit digit digit ;
month ::= "1" | "2" | "3" | "4" | "5" | "6"
| "7" | "8" | "9" | "10" | "11" | "12"
;
# TODO Case-insensitive
month-name ::= "january"
| "february"
| "march"
| "april"
| "may"
| "june"
| "july"
| "august"
| "september"
| "october"
| "november"
| "december"
;
filter-attribute ::= field "." modifier ":" value
| field "." modifier ":"
| field ":" value
| field ":"
;
tag ::= "+" word
| "-" word ;
substitution ::= "/" pattern "/" words "/" "g"? ;
pattern ::= ;
url ::= ;
file ::= ;
words ::= ;
word ::= ;
# Fundamentals
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
ws ::= " " | "\t" ;
# End