Difference between revisions of "SCI Parser Programmer's Reference/Introduction"
Line 19: | Line 19: | ||
| | ||
− | -- | + | == Introduction == |
+ | |||
+ | === Purpose === | ||
+ | |||
+ | The parser is the part of SCI that accepts sentences from the user and allows game coders to | ||
+ | |||
+ | specify how to respond to it. For example "get the diamond" is an acceptable sentence for a | ||
+ | |||
+ | user to type, and the coder can recognize it with a "spec" such as 'get/diamond', which is | ||
+ | |||
+ | followed by SCI code to be executed IF this sentences is entered. | ||
+ | |||
+ | There are three functional blocks in the parser: the sentence parser, the spec parser and the | ||
+ | |||
+ | matcher. The sentence parser takes the words typed by the user and generates a "tree" that | ||
+ | |||
+ | describes the sentence's structure using traditional grammar rules. The spec parser accepts | ||
+ | |||
+ | "specs" and also generates tree structures. A special syntax is provided for specs since they | ||
+ | |||
+ | are more versatile than simple sentences; for example one can SPECify alternative or optional | ||
+ | |||
+ | words to be recognized. Finally, the matcher is the module that takes both trees and decides | ||
+ | |||
+ | whether or not there is a match. | ||
+ | |||
+ | The following block diagram describes the parser: | ||
+ | |||
+ | <pre> | ||
+ | ********* ************ | ||
+ | * User ************* Sentence * | ||
+ | * input * * * * Parser * | ||
+ | ********* * * ************ | ||
+ | * * * | ||
+ | ************ * * * ************ | ||
+ | * External ***** * ****** Sentence * | ||
+ | * Grammar * * * Tree *** *********** | ||
+ | ************ * ************ * * * | ||
+ | * *** Matcher * | ||
+ | ************** * ************ * * * | ||
+ | * External ***** * Spec *** *********** | ||
+ | * Dictionary **** ****** Tree * | ||
+ | ************** * * ************ | ||
+ | * * | ||
+ | * * | ||
+ | ********* * ************ | ||
+ | * Coder ************* Spec * | ||
+ | * Specs * * Parser * | ||
+ | ********* ************ | ||
+ | </pre> | ||
+ | |||
+ | In the case of a common sentence, only a handful of comparisons may be required before a match | ||
+ | |||
+ | is found. If the user were to type in something totally inappropriate, the resulting tree | ||
+ | |||
+ | might be compared to fifty or even a hundred specs before falling through to a default answer | ||
+ | |||
+ | like "what are you trying to say?". | ||
+ | |||
+ | |||
+ | --3-- | ||
+ | |||
+ | --- Parseable Sentences: --- | ||
+ | |||
+ | {| | ||
+ | |SENTENCE||POSSIBLE MATCHING SPECS | ||
+ | |- | ||
+ | |"look"||'look[/!*]' or 'look' | ||
+ | |- | ||
+ | |"get the food"||'get/food' or 'get' | ||
+ | |- | ||
+ | |"hit the small tree"||'hit/tree<small'<br />'hit/tree[<small]'<br />'hit[/tree[<small]]<br | ||
+ | |||
+ | />'hit' | ||
+ | |- | ||
+ | "hit the small green<br />tree with the ax"||'hit/tree/ax'<br />'hit/tree< | ||
+ | |||
+ | (green<small)/ax<with' | ||
+ | |- | ||
+ | |"burn it" = "burn tree"||'burn/tree' | ||
+ | after last sentence | ||
+ | |- | ||
+ | |"when do fairies sleep?"||'(sleep<do<fairies)<when' | ||
+ | |- | ||
+ | |"what time is it?"||'is<what<time' | ||
+ | |} | ||
| |
Revision as of 23:54, 21 December 2015
Introduction
Purpose
The parser is the part of SCI that accepts sentences from the user and allows game coders to
specify how to respond to it. For example "get the diamond" is an acceptable sentence for a
user to type, and the coder can recognize it with a "spec" such as 'get/diamond', which is
followed by SCI code to be executed IF this sentences is entered.
There are three functional blocks in the parser: the sentence parser, the spec parser and the
matcher. The sentence parser takes the words typed by the user and generates a "tree" that
describes the sentence's structure using traditional grammar rules. The spec parser accepts
"specs" and also generates tree structures. A special syntax is provided for specs since they
are more versatile than simple sentences; for example one can SPECify alternative or optional
words to be recognized. Finally, the matcher is the module that takes both trees and decides
whether or not there is a match.
The following block diagram describes the parser:
********* ************ * User ************* Sentence * * input * * * * Parser * ********* * * ************ * * * ************ * * * ************ * External ***** * ****** Sentence * * Grammar * * * Tree *** *********** ************ * ************ * * * * *** Matcher * ************** * ************ * * * * External ***** * Spec *** *********** * Dictionary **** ****** Tree * ************** * * ************ * * * * ********* * ************ * Coder ************* Spec * * Specs * * Parser * ********* ************
In the case of a common sentence, only a handful of comparisons may be required before a match
is found. If the user were to type in something totally inappropriate, the resulting tree
might be compared to fifty or even a hundred specs before falling through to a default answer
like "what are you trying to say?".
--3--
--- Parseable Sentences: ---
"hit the small greentree with the ax"||'hit/tree/ax'
'hit/tree< (green<small)/ax<with'
SENTENCE | POSSIBLE MATCHING SPECS |
"look" | 'look[/!*]' or 'look' |
"get the food" | 'get/food' or 'get' |
"hit the small tree" | 'hit/tree<small' 'hit/tree[<small]' 'hit[/tree[<small]] 'hit' |
"burn it" = "burn tree" | 'burn/tree'
after last sentence |
"when do fairies sleep?" | '(sleep<do<fairies)<when' |
"what time is it?" | 'is<what<time' |
- Notes
< Previous: Table of Contents Next: User Parse Trees >