Source

shakespeare-parrot / manual.txt

The language is pretty simple:

 #! an optional she bang line

 a title, terminated by a dot, that may span multiple lines.

 charname, a valid name with ignored descr.
 other, a valid shakespeare char.
 Act I: contains scenes, a description.
 Scene I: contains events, is a label.
 [enter char and char]
 [enter char]
 char: sentence. sentence! sentence?
 other: sentence!
 [exit foo]
 [exeunt]
 [exeunt foo and foo]
 
sentences may be:
* proove <value> # prints "ok <value>"

* plan <value> # prints "plan <value>"

* remember <value> # push <value> in the spoken person stack

* let us proceed|return to scene <label> # goto

* <be> <value> better|worse|as good as <value> # sets condition flag

* if so|not, <sentence> # if|unless stmt checking the flag

* input 

** open your mind, # read a char
** listen to your heart # read a number

* output
** open your heart # print the number
** speak your mind # print the char

* you are <value> # assign a value
* recall <a string> # pop the value in the stack


A value is either a 
* constant expressed as
 positive|neutral name  = 1
 negative name = -1
 nothing|zero = 0
that is dobuled by the adjectives in front of it

a pretty king = 2
an ugly pig = -2

* computation
 the sum of <v> and <v>
 the difference between <v> and <v>
 the square of <v>
 twice <v>

* a reference to another character's value

 othello, you, me

Notice that programs develop through usage of 
first_persons and second_persons, so for example

juliet: you are nothing #assigns 0 to the spoken person
romeo: you are as good as me # assign 0 to juliet


Characters have both a main value (assigned) and a 
stack value where values are pushed with "remember".
When the "recall" statement gets in the current value of 
the character is replaced by that obtained by pushing the 
stack:

juliet: you are nothing #assigns 0 to the spoken person
romeo: You are a pig! # -1
       Remember me.    # 0 in stack, -1 stays as value
       Recall your ancestry! # empty stack, 0 as value

Please see the test suite and the examples/* files for 
further information.

The file src/parsers/grammar.pg is the reference for 
the available statements, while src/parser/words.pg 
shows what is considered good or bad, what are the valid 
characters and what are the valid adjectives, articles and pronouns.