Community
SCI Programming => SCI Syntax Help => Topic started by: NilG on April 04, 2019, 05:07:45 PM
-
I encountered something that seemed interesting to me while testing out some of the responses I get to certain inputs, and while I sort of see the reason behind the response, I'm not sure what the reason behind the reason for the response is. :)
So among multiple look statements, there's one that pretty straightforward:
(if (Said '/car,shuttle')
car works fine. shuttle, however, just prints the basic room response. After looking a bit, I see this is because "shuttle" is both a noun and a qualifying adjective. If I remove the "adjective" attribute, it works.
I'd set it as an adjective because you can look at the shuttle door, for example, to differentiate it from looking at a different door. From what I can tell, things are still working in that regard with shuttle just set to "noun," so all good (I think!).
But now I'm wondering, as I have a few other nouns I've also made qualifying adjectives for similar reasons, could that be problematic down the line? Do nouns function as qualifying adjectives when used in that way within the said statement? Is there a reason, in the above example, that 'shuttle' would be taken to be an adjective instead of a noun when there's nothing following it? 'look AT shuttle' works like I'd expect, but 'look shuttle' doesn't.
I've reviewed a few of the pages around here and may have missed it, but haven't seen anything specific to this. I feel like the word type associations can be fickle, and have had to play around with them in a few places to get things to work for similar reasons. It always seems to be ultimately manageable, I was just wondering if anyone know why it interprets things in these ways, treating a word like an adjective when it's also a noun and there's nothing else for it to qualify in the input?
-
Well, shuttle isn't an adjective in the English language. But nouns can act as adjectives, and the SCI parser understands that.
In other words:
'look/door' will match "look shuttle door". Or in fact any "look [anynoun] door".
If you want to specifically match shuttle door, you can do:
'look/door<shuttle'. This will match "look shuttle door" but not "look door", or "look [anynoun] door".
If you want to match "shuttle door" or "door" but not anything else, you can do:
'look/door[<!*,shuttle]'
So there doesn't seem to be any reason to make it an adjective. Although something like
'look/shuttle' should work just fine (i.e. match "look shuttle") if it's both a noun and adjective. Is that not happening for you?
-
Okay, nice. It is working as expected when I just leave shuttle as a noun and don't set it also as an adjective. I was just seeing strange behavior otherwise (shuttle set to both) where 'look/shuttle' was skipping over the expected response, seemingly because it was treating shuttle as an adjective rather than a noun.
Either way, though, if the parser's smart enough to use a noun as an adjective when appropriate, that's more than good enough for sure.
-
Either way, though, if the parser's smart enough to use a noun as an adjective when appropriate, that's more than good enough for sure.
It's really defined in the grammar that's in vocab.994 (I think?). Sierra generated that resource based on a grammar text file that you could potentially edit. But I don't know if anyone has those tools (or the original grammar file)... I looked quickly on omermor's github repos and didn't see anything.
-
I only found some fragments:
echo off
echo GC: Grammar Compiler version 0.001
echo for use by authorized Sierra programmers only
echo requires MASM assembler
echo -
echo compiling Parser grammar grammar.txt to vocab.900...
masm -ml -s -t -z -w2 grammar.txt,grammar.o > gc.log;
link grammar.o; >> gc.log
exe2bin grammar vocab.900 >> gc.log
del grammar.o >> gc.log
del grammar.exe >> gc.log
echo done.
echo here is the log file gc.log:
more < gc.log
INCLUDE nlsyms.txt
_DATA segment
org 0
;;;
;;; Mark as a VOCAB file
;;;
db 86h,0
;;;
;;; Here comes the Parser NL Grammar
;;;
dw NLS, NLROOT,NLVP, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* VP *******************
;;;
;shoot
dw NLVP, NLROOT,NLCVERB, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;put board down
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLPREP, NULL,NULL,NULL
;hit board lightly
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLADV, NULL,NULL,NULL
;talk dwarf
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NULL,NULL, NULL,NULL,NULL
;talk to dwarf: DO=dwarf
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLAP, NULL,NULL, NULL,NULL,NULL
;give gold to dwarf: DO=gold IO=dwarf
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLIOBJ,NLAP, NULL,NULL,NULL
;give dwarf the gold: IO=dwarf DO=gold (same as above)
dw NLVP, NLROOT,NLCVERB, NLIOBJ,NLNP, NLDOBJ,NLNP, NULL,NULL,NULL
;burger
dw NLVP, NLDOBJ,NLNP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;burger with fries
dw NLVP, NLDOBJ,NLNP, NLIOBJ,NLAP, NULL,NULL, NULL,NULL,NULL
; WITH FRIES or IN THE TRUNK
;dw NLVP, NLIOBJ,NLAP, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;???
;dw NLVP, NLMOD ,NLCVERB, NLROOT,NLVP, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* NP *******************
;;;
;the book
dw NLNP, NLIGNR,NLART, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;the red book
dw NLNP, NLIGNR,NLART, NLMOD ,NLCADJ, NLROOT,NLCNOUN, NULL,NULL,NULL
;red book
dw NLNP, NLMOD ,NLCADJ, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;red
dw NLNP, NLROOT,NLCADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;book
dw NLNP, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;???
;dw NLNP, NLROOT,NLCNOUN, NLMOD,NLASS, NLMOD,NLNP, NULL,NULL,NULL
;???
;dw NLNP, NLIGNR,NLASS, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* AP *******************
;;;
;put rock UNDER BRIDGE
dw NLAP, NLMOD ,NLPREP, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;give book TO DWARF
dw NLAP, NLMOD ,NLASS, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;ask maid TO DO THE BED
dw NLAP, NLMOD ,NLASS, NLROOT,NLAUXV, NLMOD ,NLNP, NULL,NULL,NULL
;ask child TO BE QUIET
dw NLAP, NLMOD ,NLASS, NLROOT,NLAUXV, NLMOD ,NLADJ, NULL,NULL,NULL
;"sleep" in "do fairies sleep" spec: 'do/fairies/sleep'
dw NLAP, NLROOT,NLCVERB, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;say the body IS IN THE TRUNK
dw NLAP, NLMOD,NLCVERB, NLROOT,NLAP, NULL,NULL, NULL,NULL,NULL
;???
;dw NLAP, NLROOT,NLNP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;dw NLAP, NLROOT,NLVP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* CNOUN *******************
;;;
;bow and arrows
dw NLCNOUN, NLROOT,NLNOUN, NLIGNR,NLCONJ, NLROOT,NLCNOUN, NULL,NULL,NULL
;prison guard jacket
dw NLCNOUN, NLMOD ,NLNOUN, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;jacket
dw NLCNOUN, NLROOT,NLNOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* CVERB *******************
;;;
;go swim
dw NLCVERB, NLMOD ,NLAUXV, NLROOT,NLCVERB, NULL,NULL, NULL,NULL,NULL
;did you see
dw NLCVERB, NLMOD ,NLAUXV, NLMOD ,NLNOUN, NLROOT,NLCVERB, NULL,NULL,NULL
;put
dw NLCVERB, NLROOT,NLVERB, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;put down
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLPREP, NULL,NULL, NULL,NULL,NULL
;lie down on
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLPREP, NLMOD ,NLPREP, NULL,NULL,NULL
;swim quickly
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLADV, NULL,NULL, NULL,NULL,NULL
;HOW MUCH IS dinner : 'is<much<how/dinner'
dw NLCVERB, NLMOD ,NLADV, NLMOD ,NLADV, NLROOT,NLCVERB, NULL,NULL,NULL
;soundly sleep
;what did you see
dw NLCVERB, NLMOD ,NLADV, NLROOT,NLCVERB, NULL,NULL, NULL,NULL,NULL
;how
dw NLCVERB, NLROOT,NLADV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;"what time is" in "what time is it" spec: 'is<what<time'
dw NLCVERB, NLMOD ,NLADV, NLMOD ,NLNOUN, NLROOT,NLCVERB, NULL,NULL,NULL
;do fairies sleep
;dw NLCVERB, NLMOD ,NLVERB, NLMOD ,NLNOUN, NLROOT,NLCVERB, NULL,NULL,NULL
;;;
;;;******************* CADJ *******************
;;;
;green
dw NLCADJ, NLROOT,NLADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;dark green
dw NLCADJ, NLMOD ,NLADJ, NLROOT,NLCADJ, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* VOCAB POINTERS *******************
;;;
dw NLADV, NLVOCAB,ADV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLVERB, NLVOCAB,VERB, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLVERB, NLVOCAB,AUXV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLAUXV, NLVOCAB,AUXV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLNOUN, NLVOCAB,NOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLPRON, NLVOCAB,PRON, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLADJ, NLVOCAB,ADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLART, NLVOCAB,ART, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLPREP, NLVOCAB,POS, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLASS, NLVOCAB,ASS, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLCONJ, NLVOCAB,CONJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NULL, NULL,NULL, NULL,NULL, NULL,NULL, NULL,NULL,NULL
_DATA ends
end
INCLUDE nlsyms.txt
_DATA segment
org 0
;;;
;;; Mark as a VOCAB file
;;;
db 86h,0
;;;
;;; Here comes the Parser NL Grammar
;;;
dw NLS, NLROOT,NLVP, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* VP *******************
;;;
;shoot
dw NLVP, NLROOT,NLCVERB, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;put board down = put<down/board
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLPREP, NULL,NULL,NULL
;color the paper red
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLCADJ, NULL,NULL,NULL
;hit board lightly
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLADV, NULL,NULL,NULL
;talk to dwarf
;put down board = put<down/board
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NULL,NULL, NULL,NULL,NULL
;give gold to dwarf = 'give<to/gold/dwarf'
;put rock under bridge = 'put<under/rock/bridge'
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLMOD,NLPREP, NLIOBJ,NLNP,NULL
;give dwarf the gold: IO=dwarf DO=gold (same as above) 'give/gold/dwarf'
dw NLVP, NLROOT,NLCVERB, NLIOBJ,NLNP, NLDOBJ,NLNP, NULL,NULL,NULL
;talk to dwarf about gold: talk<to/dwarf/gold<about
dw NLVP, NLROOT,NLCVERB, NLDOBJ,NLNP, NLIOBJ,NLAP, NULL,NULL,NULL
;talk about gold = 'talk//gold<about'
dw NLVP, NLROOT,NLCVERB, NLIOBJ,NLAP, NULL,NULL, NULL,NULL,NULL
;burger = '/burger'
;john is SORRY
dw NLVP, NLDOBJ,NLNP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;burger with fries = '/burger/fries
dw NLVP, NLDOBJ,NLNP, NLIOBJ,NLAP, NULL,NULL, NULL,NULL,NULL
;*** this doesn't work, phrase MUST have a root or SCI bombs ***
; WITH FRIES or IN THE TRUNK
;dw NLVP, NLIOBJ,NLAP, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;TELL THE MAN TO give the gold to the dwarf = 'give<TELL<MAN<TO/gold/dwarf'
dw NLVP, NLMOD ,NLCVERB, NLMOD,NLNP, NLMOD ,NLPREP, NLROOT,NLVP,NULL
;the tall clerk is the killer: 'is<(clerk<tall)/killer'
;john is sorry = is<john/sorry
dw NLVP, NLMOD,NLNP, NLROOT,NLVP, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* NP *******************
;;;
;the book
dw NLNP, NLIGNR,NLART, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;the red book
dw NLNP, NLIGNR,NLART, NLMOD ,NLCADJ, NLROOT,NLCNOUN, NULL,NULL,NULL
;red book
dw NLNP, NLMOD ,NLCADJ, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;red
dw NLNP, NLROOT,NLCADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;book
dw NLNP, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* AP *******************
;;;
;put rock UNDER BRIDGE - OBSOLETE CLAUSE
;dw NLAP, NLMOD ,NLPREP, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;give book TO DWARF
;chop tree WITH AX
dw NLAP, NLMOD ,NLASS, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;chop tree USING AX
dw NLAP, NLMOD ,NLAUXV, NLROOT,NLNP, NULL,NULL, NULL,NULL,NULL
;ask maid TO DO THE BED
dw NLAP, NLMOD ,NLASS, NLROOT,NLAUXV, NLMOD ,NLNP, NULL,NULL,NULL
;ask child TO BE QUIET
dw NLAP, NLMOD ,NLASS, NLROOT,NLAUXV, NLMOD ,NLADJ, NULL,NULL,NULL
;"sleep" in "do fairies sleep" spec: 'do/fairies/sleep'
dw NLAP, NLROOT,NLCVERB, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;say the body IS IN THE TRUNK
dw NLAP, NLMOD,NLCVERB, NLROOT,NLAP, NULL,NULL, NULL,NULL,NULL
;ask ABOUT SYMBOL OF MITHRA = ask//symbol<about<symbol<of
;("of" is a positional PREPosition)
dw NLAP, NLMOD ,NLASS, NLROOT,NLNP, NLMOD,NLPREP, NLMOD,NLNP,NULL
;???
;dw NLAP, NLROOT,NLNP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;dw NLAP, NLROOT,NLVP, NULL ,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* CNOUN *******************
;;;
;bow and arrows
;door of the crypt
dw NLCNOUN, NLROOT,NLNOUN, NLIGNR,NLCONJ, NLROOT,NLNP, NULL,NULL,NULL
;prison guard jacket
dw NLCNOUN, NLMOD ,NLNOUN, NLROOT,NLCNOUN, NULL,NULL, NULL,NULL,NULL
;jacket
dw NLCNOUN, NLROOT,NLNOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* CVERB *******************
;;;
;go swim
dw NLCVERB, NLMOD ,NLAUXV, NLROOT,NLCVERB, NULL,NULL, NULL,NULL,NULL
;did you see?
;do zombies sleep?
dw NLCVERB, NLMOD ,NLAUXV, NLMOD ,NLNOUN, NLROOT,NLCVERB, NULL,NULL,NULL
;john IS sorry
dw NLCVERB, NLROOT,NLAUXV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;go to swim
dw NLCVERB, NLMOD,NLAUXV, NLMOD,NLPREP, NLROOT,NLVERB, NULL,NULL,NULL
;go down to swim
dw NLCVERB, NLMOD,NLAUXV, NLMOD,NLPREP, NLMOD,NLPREP, NLROOT,NLVERB,NULL
;put
dw NLCVERB, NLROOT,NLVERB, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;put down
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLPREP, NULL,NULL, NULL,NULL,NULL
;lie down on
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLPREP, NLMOD ,NLPREP, NULL,NULL,NULL
;COLOR BRIGHT RED the paper
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLCADJ, NULL,NULL, NULL,NULL,NULL
;swim quickly
dw NLCVERB, NLROOT,NLVERB, NLMOD ,NLADV, NULL,NULL, NULL,NULL,NULL
;HOW MUCH IS dinner : 'is<much<how/dinner'
dw NLCVERB, NLMOD ,NLADV, NLMOD ,NLADV, NLROOT,NLCVERB, NULL,NULL,NULL
;soundly sleep
;what did you see
dw NLCVERB, NLMOD ,NLADV, NLROOT,NLCVERB, NULL,NULL, NULL,NULL,NULL
;how
dw NLCVERB, NLROOT,NLADV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;"what time is" in "what time is it" spec: 'is<what<time'
dw NLCVERB, NLMOD ,NLADV, NLMOD ,NLNOUN, NLROOT,NLCVERB, NULL,NULL,NULL
;look and feel
dw NLCVERB, NLROOT,NLVERB, NLIGNR,NLCONJ, NLROOT,NLVERB, NULL,NULL,NULL
;look, listen and feel
dw NLCVERB, NLROOT,NLVERB, NLROOT,NLVERB, NLIGNR,NLCONJ, NLROOT,NLVERB,NULL
;;;
;;;******************* CADJ *******************
;;;
;green
dw NLCADJ, NLROOT,NLADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
;dark green
dw NLCADJ, NLMOD ,NLADJ, NLROOT,NLCADJ, NULL,NULL, NULL,NULL,NULL
;;;
;;;******************* VOCAB POINTERS *******************
;;;
dw NLADV, NLVOCAB,ADV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLVERB, NLVOCAB,VERB, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLVERB, NLVOCAB,AUXV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLAUXV, NLVOCAB,AUXV, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLNOUN, NLVOCAB,NOUN, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLPRON, NLVOCAB,PRON, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLADJ, NLVOCAB,ADJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLART, NLVOCAB,ART, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLPREP, NLVOCAB,POS, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLASS, NLVOCAB,ASS, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NLCONJ, NLVOCAB,CONJ, NULL,NULL, NULL,NULL, NULL,NULL,NULL
dw NULL, NULL,NULL, NULL,NULL, NULL,NULL, NULL,NULL,NULL
_DATA ends
end
(S (ROOT VP))
;;;
;;;******************* VP *******************
;;;
;shoot
(VP (ROOT CVERB))
;put board down = put<down/board
(VP (ROOT CVERB) (DOBJ NP) (MOD POS))
;color the paper red
(VP (ROOT CVERB) (DOBJ NP) (MOD CADJ))
;hit board lightly
(VP (ROOT CVERB) (DOBJ NP) (MOD ADV))
;talk to dwarf
;put down board = put<down/board
(VP (ROOT CVERB) (DOBJ NP))
;give gold to dwarf = 'give<to/gold/dwarf'
;put rock under bridge = 'put<under/rock/bridge'
(VP (ROOT CVERB) (DOBJ NP) (MOD POS) (IOBJ NP))
;give dwarf the gold: IO=dwarf DO=gold (same as above)'give/gold/dwarf'
(VP (ROOT CVERB) (IOBJ NP) (DOBJ NP))
;talk to dwarf about gold: talk<to/dwarf/gold<about
(VP (ROOT CVERB) (DOBJ NP) (IOBJ AP))
;talk about gold = 'talk//gold<about'
(VP (ROOT CVERB) (IOBJ AP))
;burger = '/burger'
;john is SORRY
(VP (DOBJ NP))
;burger with fries = '/burger/fries
(VP (DOBJ NP) (IOBJ AP))
;*** this doesn't work phrase MUST have a root or SCI bombs ***
; WITH FRIES or IN THE TRUNK
;(VP (IOBJ AP))
;TELL THE MAN TO give the gold to the dwarf = 'give<TELL<MAN<TO/gold/dwarf'
(VP (MOD CVERB) (MOD NP) (MOD POS) (ROOT VP))
;the tall clerk is the killer: 'is<(clerk<tall)/killer'
;john is sorry = is<john/sorry
(VP (MOD NP) (ROOT VP))
;bargain with man about map
(VP (ROOT CVERB) (IOBJ AP) (DOBJ AP))
(VP (ROOT CVERB) (DOBJ AP) (IOBJ AP))
;;;
;;;******************* NP *******************
;;;
;the book
(NP (IGNR ART) (ROOT CNOUN))
;the red book
(NP (IGNR ART) (MOD CADJ) (ROOT CNOUN))
;red book
(NP (MOD CADJ) (ROOT CNOUN))
;red
(NP (ROOT CADJ))
;book
(NP (ROOT CNOUN))
;;;
;;;******************* AP *******************
;;;
;put rock UNDER BRIDGE - OBSOLETE CLAUSE
;(AP (MOD POS) (ROOT NP))
;give book TO DWARF
;chop tree WITH AX
(AP (MOD ASS) (ROOT NP))
;chop tree USING AX
(AP (MOD AUXV) (ROOT NP))
;ask maid TO DO THE BED
(AP (MOD ASS) (ROOT AUXV) (MOD NP))
;ask child TO BE QUIET
(AP (MOD ASS) (ROOT AUXV) (MOD ADJ))
;"sleep" in "do fairies sleep" spec: 'do/fairies/sleep'
(AP (ROOT CVERB))
;say the body IS IN THE TRUNK
(AP (MOD CVERB) (ROOT AP))
;ask ABOUT SYMBOL OF MITHRA = ask//symbol<about<symbol<of
;("of" is a positional preposition)
(AP (MOD ASS) (ROOT NP) (MOD POS) (MOD NP))
;???
;(AP (ROOT NP))
;(AP (ROOT VP))
;;;
;;;******************* CNOUN *******************
;;;
;bow and arrows
;door of the crypt
(CNOUN (ROOT NOUN) (IGNR CONJ) (ROOT NP))
;prison guard jacket
(CNOUN (MOD NOUN) (ROOT CNOUN))
;jacket
(CNOUN (ROOT NOUN))
;;;
;;;******************* CVERB *******************
;;;
;go swim
(CVERB (MOD AUXV) (ROOT CVERB))
;did you see?
;do zombies sleep?
;(CVERB (MOD AUXV) (MOD NOUN) (ROOT CVERB))
(CVERB (MOD AUXV) (MOD NP) (ROOT CVERB))
;USE SWORD TO CUT the tree = cut<use<sword<to/tree
(CVERB (MOD AUXV) (MOD NP) (MOD POS) (ROOT CVERB))
;john IS sorry
(CVERB (ROOT AUXV))
;go to swim
(CVERB (MOD AUXV) (MOD POS) (ROOT VERB))
;go down to swim
(CVERB (MOD AUXV) (MOD POS) (MOD POS) (ROOT VERB))
;put
(CVERB (ROOT VERB))
;put down
(CVERB (ROOT VERB) (MOD POS))
;lie down on
(CVERB (ROOT VERB) (MOD POS) (MOD POS))
(CVERB (ROOT VERB) (MOD ADV) (MOD POS))
;COLOR BRIGHT RED the paper
(CVERB (ROOT VERB) (MOD CADJ))
;swim quickly
(CVERB (ROOT VERB) (MOD ADV))
;HOW MUCH IS dinner : 'is<much<how/dinner'
(CVERB (MOD ADV) (MOD ADV) (ROOT CVERB))
;soundly sleep
;what did you see
(CVERB (MOD ADV) (ROOT CVERB))
;how
(CVERB (ROOT ADV))
;"what time is" in "what time is it" spec: 'is<what<time'
(CVERB (MOD ADV) (MOD NOUN) (ROOT CVERB))
;look and feel
(CVERB (ROOT VERB) (IGNR CONJ) (ROOT VERB))
;look listen and feel
(CVERB (ROOT VERB) (ROOT VERB) (IGNR CONJ) (ROOT VERB))
;;;THIS IS A TEST FOR "I AM SORRY" --Pablo for Brian
;(CVERB (MOD NP) (ROOT CVERB))
;;;
;;;******************* CADJ *******************
;;;
;green
(CADJ (ROOT ADJ))
;dark green
(CADJ (MOD ADJ) (ROOT CADJ))
;;;
;;;******************* (VOCAB POINTERS *******************
;;;
(ADV (VOCAB KADV))
(VERB (VOCAB KVERB))
(VERB (VOCAB KAUXV))
(AUXV (VOCAB KAUXV))
(NOUN (VOCAB KNOUN))
(PRON (VOCAB KPRON))
(ADJ (VOCAB KADJ))
(ART (VOCAB KART))
(POS (VOCAB KPOS))
(ASS (VOCAB KASS))
(CONJ (VOCAB KCONJ))
NULL equ 0
;;;
;;; the following should be in sync
;;; NLSYMS.H
;;;
MINNLTOKEN equ 300
;NLRP equ 301
;NLLP equ 302
NLVERB equ 303
NLNOUN equ 304
NLART equ 305
NLADJ equ 306
NLPREP equ 307
NLPRON equ 308
NLCONJ equ 309
NLAUXV equ 310
NLADV equ 311
NLASS equ 312
NLCNOUN equ 313
NLCADJ equ 314
NLCVERB equ 315
NLVP equ 316
NLNP equ 317
NLAP equ 318
NLS equ 319
NLEOL equ 320
NLROOT equ 321
NLDOBJ equ 322
NLIOBJ equ 323
NLMOD equ 324
NLIGNR equ 325
NLVOCAB equ 326
NLSPEC equ 327
NLSPEC2 equ 328
NLPHR equ 329
NLPHR2 equ 330
NLMORE equ 331
NLUNIT equ 332
NLPNCT equ 333
NLEMPT equ 334
NLOR equ 335
NLOR2 equ 336
NLATOM equ 337
NLOPT equ 338
NLWORD equ 339
NLPUT equ 340
NLNUM equ 341
EOGRAMMAR equ 342
MAXNLTOKEN equ 343
;;;
;;; the following should be in sync
;;; VOCAB.H
;;;
VERB equ 800h ;2048
ADV equ 400h ;1024
AUXV equ 200h ;0512
NOUN equ 100h ;0256
PRON equ 080h ;0128
ADJ equ 040h ;0064
ART equ 020h ;0032
POS equ 010h ;0016
ASS equ 008h ;0008
CONJ equ 004h ;0004
ORSAID equ 0f0h ;240
ANDSAID equ 0f1h ;241
NEXTPART equ 0f2h ;242
LEFTPAREN equ 0f3h ;243
RIGHTPAREN equ 0f4h ;244
OPTBEGIN equ 0f5h ;245
OPTEND equ 0f6h ;246
NUMBER equ 0f7h ;247
MODIFIES equ 0f8h ;248
RUNON equ 0f9h ;249
METAEND equ 0ffh ;255
;;;
;;; the following should be in sync
;;; NLSDGRMR.H
;;;
METASHIFT equ 100h
NLRNON equ RUNON * METASHIFT
NLLESS equ MODIFIES * METASHIFT
NLSLSH equ NEXTPART * METASHIFT
NLLP equ LEFTPAREN * METASHIFT
NLRP equ RIGHTPAREN * METASHIFT
NLLB equ OPTBEGIN * METASHIFT
NLRB equ OPTEND * METASHIFT
NLCOMA equ ORSAID * METASHIFT
NLAND equ ANDSAID * METASHIFT
NLEOSPEC equ METAEND * METASHIFT
NLEND equ METAEND * METASHIFT
-
So they went from assembly to lisp, huh?
-
Yeah, so it looks like the vocab (which I was wrong, it's 900, not 994) is just a straight up dump of the stuff in grammar.txt. You could (tediously) do that manually, or it looks like if you've got the masm.exe, link.exe and exe2bin.exe Sierra tools that would do the job (using the 1988 GRAMMAR.TXT, which is I guess is just straight up asm?). And also assuming you're familiar with Backus-Naur form, which is I guess kind of what the grammar is written in.
I wonder if the localized versions (what did they do? Spanish? German? French?) had different grammar resources...
-
MASM is Microsoft's Macro Assembler, which they also used for the SCI16 (going by archive name) interpreter proper. Not all assemblers are made equal, and the specific syntax won't work on various other assemblers. The alternative from 1990 is Lisp S-Expressions, much like SC script code, not BNF (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form). It'd be trivial to make a grammar compiler that can handle the 1990 version, and I've written a minimal data-only "assembler" for a completely unrelated project years back so I can confirm it'd be trivial to make one for the older grammars too, without the link and exe2bin steps.
Also, going by language.h you missed Italian and Portuguese, I guess.
Edit: I just assembled a vocab.900 myself with MASM (though it's ML here), with only the ASM file as a parameter. I got some linkage warnings, but otherwise I have an OBJ and EXE with the raw data inside. For the OBJ, the raw data started at offset 0x30, offset 0x200 in the EXE. The latter has no trailing bits. From a cursory comparison with a randomly-chosen SCI0 game it seems about right.
-
Some said documentation, might be of some help:
http://sciprogramming.com/tutorial.php?entry=5465 (http://sciprogramming.com/tutorial.php?entry=5465)
-
If I were to make a tool (https://github.com/Kawa-oneechan/SCITools) to compile those grammar files, should it be a minisembler for the 80s version or a compiler for the 90s version?
-
Both?
-
I'll just write a general-use minisembler for starters... oops, I already did!