Definition file grammar

Token

Meaning

‘*’

Zero or more

‘!’

Zero or one

‘+’

One or more

‘>>’

Sequence/concatenation

‘|’

alternate

‘-‘

not

defs                ::= *( nextline | extern ) >> +suite >> EOL
extern              ::= "extern" >> ( absolutepath  >> !( ":" >> identifier )
                        >> +nextline
suite               ::= "suite" >> suiteName >> *( variable | inlimit |
                        defstatus  | limit | late | clock | repeat |
                        autocancel | zombie ) >> *( family | task ) >> endsuite
family              ::= "family" >> familyName >> !leaf_ecf >> *(task | family)
                        >> endfamily
task                ::= "task"  >> taskName  >> leaf_ecf  >> !endtask
leaf_ecf            ::= *( variable | trigger | time | today |
                        date | day | defstatus | complete | inlimit |
                        label | event | late | limit | meter | repeat |
                        cron | autocancel | zombie
                        )
                        | aviso
                        | mirror
clock               ::= "clock" >> ( "real"| "hybrid" ) >>
                        ( ( clock_date >> !(hh_mm | int ) ) | (hh_mm | int ))
                        >> +nextline
trigger             ::= "trigger"  >> expression >> +nextline
complete            ::= "complete" >> expression >> +nextline
variable            ::= "edit" >> identifier >> varvalue >> +nextline
label               ::= "label" >> identifier >> quotedstring  >> +nextline
aviso               ::= "aviso" >>
                        *( "--name" >> identifier
                        | "--listener" >> "'" >> jsonstring >> "'"
                        | "--url" >> ( varvalue | string )
                        | "--polling" >> (varvalue | +(integer))
                        | "--schema" >> ( varvalue | string )
                        | "--auth" >> ( varvalue | string )
                        )
mirror              ::= "mirror" >>
                        *( "--name" >> identifier
                        | "--remote_path" >> string
                        | "--remote_host" >> ( varvalue | string )
                        | "--remote_port" >> ( varvalue | string )
                        | "--polling" >> (varvalue | +(integer))
                        | "--auth" >> ( varvalue | string )
                        | --ssl
                        )
time                ::= "time" >> !'+ >> (timeseries | two_int_p >>
                        “:” two_int_p) >> +nextline
today               ::= "today" >> !'+ >> (timeseries | two_int_p >>
                        “:” two_int_p ) >> +nextline
day                 ::= "day" >> (“monday” | “tuesday” | “wednesday” |
                        “thursday” | “friday” | “saturday” | “sunday”)
                        + nextline
date                ::= "date"  >> !’+’ >> (  two_int_p | ‘*’  )  >> "." >>
                        ( two_int_p | ‘*’) >> "." >> (two_int_p | ‘*’)
autocancel          ::= "autocancel"  >> !’+’ >>
                        (( two_int_p >> ‘:’ >> two_int_p) |
                        unsigned integer) >> +nextline
limit               ::= "limit" >> ( identifier >> unsigned int ) >> +nextline
inlimit             ::= "inlimit" >>( (nodePath >> ":“ >>
                        identifier) | identifier )) >> ! unsigned int >> +nextline
event               ::= eventcontent2 | eventcontent1;
eventcontent1       ::= "event”  >> ( eventnumber  |  eventname  ) >> +nextline
eventcontent2       ::= "event”  >> ( eventnumber  >> eventname  ) >> +nextline
meter               ::= "meter" >> identifier >> ( int >> int >> !unsigned int)
                        >> +nextline
defstatus           ::= "defstatus" >> dstate  >> +nextline
endsuite            ::= "endsuite" >> *nextline
endfamily           ::= "endfamily" >> +nextline
endtask             ::= "endtask" >> +nextline
zombie              ::= "zombie" >> zombie_type >> ":" >>
                        !(client_side_action | server_side_action)
                        >> ":" >> *child >> ":" >> !zombie_life_time
zombie_type         ::= "user" | "ecf" | "path"
child               ::= "init" | "event" | "meter" | "label" | "wait" |
                        "abort" | "complete"
client_side_action  ::= "fob" | "fail" | "block"
server_side_action  ::= "adopt" | "delete" | "kill"
zombie_life_time    ::= unsigned integer  ( default:  user(300), ecf(3600),
                        path(900)  )
late                ::= "late" >> late_option >> !late_option  >>
                        !late_option >> +nextline
late_option         ::= "-c" >> hh_mm | ("-s" >> hh_mm ) | "-a" >> hh_mm
repeat              ::= "repeat" >> repeat_type >> +nextline
repeat_type         ::= repeat_datetime | repeat_datetimelist | repeat_date |
                        repeat_day | repeat_month | repeat_year |
                        repeat_integer | repeat_enumerated | repeat_string |
                        repeat_datelist
repeat_day          ::= "day" >> unsigned integer >> !ymd
repeat_integer      ::= "integer" >> identifier >> integer >> " " >>
                        integer >> " " >> integer
repeat_enumerated   ::= "enumerated" >> identifier >> +identifier
repeat_string       ::= "string" >> identifier >> +identifier
repeat_date         ::= "date" >> identifier >> ymd >> ymd >> integer
repeat_datetime     ::= "datetime" >> identifier >>
                        instant >> instant >> duration
repeat_datelist     ::= "datelist" >> identifier >> +( ymd )
repeat_datetimelist ::= "datetimelist" >> identifier >> +( instant )
varvalue            ::= tickquotedstring | quotedstring | identifier
suiteName           ::= node_name >> +nextline
familyName          ::= node_name >> +nextline
taskName            ::= node_name >> +nextline
nodestate           ::= "complete” | "unknown” | "queued" | "aborted" |
                        “active”
dstate              ::= "complete” | "unknown” | "queued" | "aborted" |
                        “active” | “suspended”
eventnumber         ::= unsigned integer
eventname           ::= identifier
hh_mm               ::= !'+' >> two_int_p >> ":" >> two_int_p
clock_date          ::= (  two_int_p | ‘*’  )  >> "." >>
                        (  two_int_p | ‘*’  ) >> "." >> (two_int_p | ‘*’)
cron                ::= "cron" >> ((‘-w >> +int) | (‘-d’ >> +int) |
                        (‘-m’ >> +int)) >> timeseries >> +nextline
node_name           ::= (alpha_numeric | ‘_’ )
                        >> *(alpha_numeric | ‘_’ | ‘.’ )
comment             ::= ’#’ >> printable chars > newline
nextline            ::= newline | comment
timeseries          ::= two_int_p >> “:” >> two_int_p >>  two_int_p >>
                        “:” >> two_int_p >> two_int_p >> “:” >> two_int_p
quotedstring        ::= ’”‘ >> *(printable chars) >> ‘”’
tickquotedstring    ::= ’'’ >> *(print_p - nextline) ]
absolutepath        ::= !’/’ >> identifier >> *( ‘/’ >> identifier )
dotdotpath          ::= ".."  >> +( ‘/’ >> identifier )
dotpath             ::= ‘.’  >> +( ‘/’  >> identifier )
identifier          ::= (alpha_numeric | ‘_’)  >> *(alpha_numeric | ‘_’)
nodePath            ::= absolutepath | dotdotpath | dotpath
expression          ::= printable_chars >> !’\’ >> nextline
int_p               ::= integer
two_int_p           ::= 2 digit integer
theYear             ::= 4 digit integer
ymd                 ::= 8 digit integer
instant             ::= theYear >> two_int_p >> two_int_p >>
                        "T" >> two_int_p >> two_int_p >> two_int_p
duration            ::= int_p >> ":" >> two_int_p >> ":" >> two_int_p
newline             ::= \n
string              ::= printable_chars >> *(printable_chars)
jsonstring          ::= __ as per JSON format specification __
printable_chars     ::= "a-zA-Z"