I wrote the following Bacus Naur Form (BNF) for the Artwork constructs
and data structures on May 26, 1995. If you have any questions or
suggestions, please feel free to let me know.
Thanks,
Rob Sinclair
(rsinclai@crl.nmsu.edu)
If you are specifically interested in the structure of our normalized when frame, search for the following text: "<"when Normalized">"
I have used the following BNF conventions:
For example, the spaces are significant between "<"first">" and
"<"last">" in a person's name:
"<"person's Name">" ::= "<"first">" "<"last">"
but are not significant between the possible seasons in:
"<"season">" ::= spring | summer | fall | winter
"<"adverb">" ### See Note 4 ###
::= actually | after_all |
again | agreeably |
already | also |
always | babble |
barely | completely |
definitely | further |
surely | generally |
if_possible | just |
only | off_the_top_of_head |
perhaps | really |
still | unfortunately
"<"adverb List">" ### See Note 4 ###
::= ["<"adverb">"] |
[qzmultipleqz, ("<"adverb">""<"spaces">")+]
"<"alt ILT">"
::= #| ("<"nl">")* "<"ilt">" ("<"nl">")* |#
"<"alphanumeric">"
::= ("<"letter">"|"<"digit">")+
"<"alt Speech Acts">" ### See Note 4 ###
::= ["<"speech Act">"] |
[qzmultipleqz, ("<"speech Act">""<"spaces">")+]
"<"am Pm">"
::= am | pm
"<"aspect">"
::= progressive | perfect
"<"attitude">" ### See Note 4 ###
::= qzpossible |
qzshould |
qzneeded |
qzdesired |
qzimpossible |
qzshould_not |
qzunneeded |
qzundesired |
qzhow_about |
qzlet_s
"<"augmented ILT">" ### See Note 1 ###
::= [[speech_act, "<"speech Act">"],
[a_speech_act, "<"alt Speech Acts">"],
[sentence_type, "<"sentence Type">"],
[certaintyFactor, "<"real Number">"],
("<"top Level Frame">",)^
([conjunction, "<"conjunctions">"],)^
([adverb, "<"adverb List">"],)^
([style, "<"style">"],)^
([speaker_attitude, "<"speaker Attitude">"],)^
([next_utterance, "<"augmented ILT">"],)^
]
"<"clarify">" ### See Notes 2 & 4 ###
::= [[frame, qzclarify]
[attitude, "<"attitude">"]
[tense, "<"tense">"]
[aspect, "<"aspect">"]
[negative, "<"pos-neg">"]
[topic, "<"frame">"]
[whose, "<"who">"]
[clarified, "<"frame">"]]
"<"comment">"
::= ;;("<"character">")^
"<"conjunction">" ### See Note 4 ###
::= and | because |
but | for_example |
if | or |
so | then |
therefore | unless |
that_is_to_say
"<"conjunction List">" ### See Note 4 ###
::= ["<"conjunction">"] |
[qzmultipleqz, ("<"conjunction">""<"spaces">")+]
"<"connective">" ### See Note 4 ###
::= and | or | eor | _ | between
"<"connective List">" ### See Note 4 ###
::= ["<"connective">"] |
[qzmultipleqz, ("<"connective">""<"spaces">")+]
"<"dashed Line">" ### See Note 4 ###
::= (_)+
"<"day of Week">"
::= sunday | monday |
tuesday | wednesday |
thursday | friday |
saturday
"<"day of Week List">" ### See Note 4 ###
::= ["<"day of Week">"] |
[qzmultipleqz, ("<"day of Week">""<"spaces">")+]
"<"dow Value">"
::= 1..31
"<"dow Value List">"
::= ["<"dow Value">"] |
[qzmultipleqz, ("<"dow Value">""<"spaces">")+]
"<"digit">"
::= 0..9
"<"duration">"
::= "<"integer">" | epsilon | undetermined
"<"english Utter">" ### See Note 4 ###
::= ["<"phrase">"]
"<"english Utter List">"
::= "<"word List">"
"<"event Time">" ### See Notes 1 & 4 ###
::= [[frame, qzevent_time]
[event, "<"predicate">"]]
"<"fragment">" ### See Note 2 ###
::= "<"when">" | "<"how Long">" | "<"who">" |
"<"where">" | "<"why">" | "<"negative">"
"<"frame">" ### See Note 2 ###
::= "<"predicate">" | "<"when">" | "<"how Long">" |
"<"where">" | "<"who">" | "<"what">"
"<"hour List">"
::= ["<"hour">"] |
[qzmultipleqz, ("<"hour">""<"spaces">")+]
"<"how Long">"
::= "<"length">" | "<"length List">"
"<"indexical">"
::= now | today | tomorrow | date |
time | then | that | there |
here | later | when | what
"<"integer">"
::= ("<"digit">")+
"<"interval">" ### See Notes 1 & 4 ###
::= [[frame, qzinterval]
[incl_excl, "<"incl-excl">"]
[start, "<"when">"]
[end, "<"when">"]
[specifier, "<"specifier List">"]]
"<"length List">" ## See Note 4 ###
::= [[frame, qzlength_list]
[connective, "<"connective List">"]
[items, "<"length">"]]
"<"letter">"
::= a..z | A..Z
"<"minute List">"
::= ["<"minute">"] |
[qzmultipleqz, ("<"minute">""<"spaces">")+]
"<"modifier">" ### See Note 2 ###
::= "<"predicate">" | "<"when">" | "<"what">"
"<"nl">"
::= \n
"<"number Parses Comment">" ### See Note 4 ###
::= ;; number_of_parses: "<"integer">"
"<"pos in Utter">" ### See Note 4 ###
::= "<"integer">"
"<"pos-neg">"
::= + | _
"<"predicate">" ### See Note 2 ###
::= "<"abandon">" | "<"agree">" | "<"arrive">" |
"<"avoid">" | "<"bad">" | "<"booked">" |
"<"busy">" | "<"call">" | "<"check">" |
"<"choose">" | "<"clarify">" | "<"how">" |
"<"considering">" | "<"desired">" | "<"discuss">" |
"<"eat">" | "<"end">" | "<"free">" |
"<"good">" | "<"inform">" | "<"know">" |
"<"leave">" | "<"let">" | "<"meet">" |
"<"needed">" | "<"opposite">" | "<"return">" |
"<"out-of-town">" | "<"same">" | "<"schedule">" |
"<"send">" | "<"settled">" | "<"start">" |
"<"suggest">" | "<"wait">" | "<"undesired">"
"<"quantity Word">" ### See Note 4 ###
::= many | few | a_few | couple | how_many
"<"relative Time">" ### See Notes 1 & 4 ###
::= [[frame, qzrelative_time]
[origin, "<"when">"]
[length, "<"integer">"]
[direction, "<"pos-neg">"]]
"<"separator Comment">"
::= ;;"<"spaces">""<"dashed Line">"
"<"simple Time">" ### See Notes 1 & 4 ###
::= [[frame, qzsimple_time]
[minute, "<"integer">"]
[hour, "<"integer">"]
[day, "<"integer">"]
[month, "<"integer">"]
[day_of_week, "<"day of Week List">"]
[time_of_day, "<"time of Day">"]
[am_pm, "<"am Pm">"]
[modifier, "<"modifier">"]
[specifier, "<"specifier List">"]]
"<"sign">"
::= + | -
"<"skipped Word List">" ### See Note 4 ###
::= nil | [(["<"word">" "<"pos in Utter">"])+"<"spaces">"]
"<"spaces">"
::= ( )*
"<"spanish Utter">" ### See Note 4 ###
::= ["<"phrase">"]
"<"spanish Utter List">"
::= "<"word List">"
"<"speaker">"
::= s1 | s2
"<"speaker Attitude">" ### See Note 4 ###
::= qzwondered | qzdoubted
"<"special Name">" ### See Note 4 ###
::= independence_day | thanksgiving |
thanksgiving_day | labor_day
"<"special Time">" ### See Notes 1 & 4 ###
::= [[frame, qzspecial_time]
[specifier, "<"specifier List">"]
[modifier, "<"modifier">"]
[name, "<"name">"]
[of, "<"when">"]]
"<"specifier">"### See Notes 4 ###
::= all_member | all_range | also |
another | any | anytime |
approximate | at_least | behind |
both_of | concrete | couple |
definite | early | either_of |
even | exact | except |
few | first | following |
fourth | in_front_of | indefinite |
last | late | less_than |
long | middle | more_than |
most_member | most_range | necessary |
negative | next | only |
other | particular | perhaps |
plural | preceding | same |
second | second_last | short |
some | sometime | that |
the_end_of | the_rest_of | third |
this | what | which |
"<"integer">"
"<"specifier List">"
::= ["<"specifier">"] |
[qzmultipleqz, ("<"specifier">""<"spaces">")+]
"<"speech Act">" ### See Note 4 ###
::= qz??? | qzaccept |
qzacknowledge | qzaddress |
qzaffirm | qzclosing |
qzconfirm | qzconfirm_time |
qzjoke | qznegate |
qzopening | qzreject |
qzrequest_response | qzsuggest |
qzstate_constraint | qzrequest_suggestion |
qzrequest_clarification |
qzconfirm_appointment
"<"status">"
::= determined |
null |
part_determined |
same |
undetermined
"<"style">"
::= polite | blunt
"<"tense">"
::= past
"<"time Adverb">"
::= after | at | before | from |
null | til | to | until
"<"time List">" ### See Notes 1 & 4 ###
::= [[frame, qztime_list]
[specifier, "<"specifier List">"]
[connective, "<"connective List">"]
[items, "<"when List">"]]
"<"time of Day">"
::= afternoon | evening | mid_afternoon |
mid_morning | midnight | morning |
night | noon | null
"<"time of Day List">"
::= ["<"time of Day">"] |
[qzmultipleqz, ("<"time of Day">""<"spaces">")+]
"<"top Level Frame">"
::= "<"fixed Expression">" | "<"predicate">" | "<"fragment">"
"<"turn ID Comment">"
::= ;; part of turn: "<"turn Name">"
"<"turn Name">"
::= ("<"character">")+
"<"turn Number">"
::= "<"integer">"
"<"turn Number Comment">"
::= ;; "<"turn Number">"
"<"utter Number">"
::= "<"integer">"
"<"when List">" ### See Note 4 ###
::= ["<"when">"] |
[qzmultipleqz, ("<"when">","<"spaces">")+]
"<"when Normalized">"
::= [when,
[connective, "<"connective List">"],
[gen_spec, "<"generic-specific">"],
[duration, "<"duration">"],
[name, "<"name">"],
[interval,
[specifier, "<"specifier List">"],
[start,
[sday_status, ["<"status">", "<"origin">"],
[sday_week, "<"day of Week List">"],
[sday, "<"dow Value List">"],
[stime_day, "<"time of Day List">"],
[sam_pm, "<"am Pm">"]],
[smonth, ["<"status">", "<"origin">"]],
[shour_status, ["<"status">", "<"origin">"],
[stime_adv, "<"time Adverb">"],
[shour, "<"hour List">"],
[smin, "<"minute List">"]]],
[end,
[eday_status, ["<"status">", "<"origin">"],
[eday_week, "<"day of Week List">"],
[eday, "<"dow Value List">"],
[etime_day, "<"time of Day List">"],
[eam_pm, "<"am Pm">"]],
[emonth, ["<"status">", "<"origin">"]],
[ehour_status, ["<"status">", "<"origin">"],
[etime_adv, "<"time Adverb">"],
[ehour, "<"hour List">"],
[emin, "<"minute List">"]]]],
[modifiers, ["<"when List">"]]]
"<"word">"
::= ("<"letter">")+
"<"word List">"
::= [("<"word">"(,)^"<"spaces">")*]
"<"words Skipped Comment">"
::= ;; words skipped: "<"skipped Word List">"
"<"ilt Entry">"
::= nil | "<"ilt">" | (*ilt* *unknown*)
"<"sentence Comment">"
::= ;; sentence to parse: "<"spanish Utter">"
"<"type_1.discourse">"
::= "<"separator Comment">""<"nl">"
"<"turn ID Comment">""<"nl">"
"<"turn Number Comment">""<"nl">""<"nl">"
"<"utterance">""<"nl">""<"nl">"
"<"sentence Comment">""<"nl">"
"<"english Comment">""<"nl">""<"nl">"
"<"english Utter">""<"nl">""<"nl">"
"<"words Skipped Comment">""<"nl">"
"<"number Parses Comment">""<"nl">""<"nl">"
("<"comment">""<"nl">")^
"<"ilt Entry">""<"nl">"
("<"alt ILT">""<"nl">")^
"<"utterance">"
::= ("<"utter Number">" "<"speaker">" "<"spanish Utter">")
"<"ilt Entry">"
::= nil | "<"ilt">" | (qziltqz qzunknownqz)
"<"sentence Comment">"
::= ;; sentence to parse: "<"spanish Utter">"
"<"type_2.discourse">"
::= "<"separator Comment">""<"nl">"
"<"turn ID Comment">""<"nl">"
"<"turn Number Comment">""<"nl">""<"nl">"
"<"utterance">""<"nl">""<"nl">"
"<"sentence Comment">""<"nl">"
"<"english Comment">""<"nl">""<"nl">"
"<"english Utter">""<"nl">""<"nl">"
"<"words Skipped Comment">""<"nl">"
"<"number Parses Comment">""<"nl">""<"nl">"
("<"comment">""<"nl">")^
"<"ilt Entry">""<"nl">"
("<"alt ILT">""<"nl">")^
"<"utterance">"
::= ("<"utter Number">" "<"speaker">" "<"spanish Utter">")
"<"ilt">" ### See Note 1 ###
::= [[a_speech_act, "<"alt Speech Act">"]
[sentence_type, "<"sentence Type">"]
("<"top Level Frame">")^
([conjunction, "<"conjunction List">"])^
([adverb, "<"adverb List">"])^
([style, "<"style">"])^
([speaker_attitude, "<"speaker Attitude">"])^
([next_utterance, "<"ilt Entry">"])^
]
"<"ilt Entry">"
::= nil | "<"ilt">" | [qziltqz qzunknownqz]
"<"type_3.discourse">"
::= [("<"utterance">", "<"english Utter List">", "<"ilt">"(,)^)*]
"<"utterance">"
::= ["<"utter Number">", "<"speaker">", "<"spanish Utter">"]
"<"discourse Entity">"
::= de(utter("<"utterance">"),
ailt("<"augmented ILT">"),
tag("<"tag">"))
For Type_2.Discourse, make the following substitutions: