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.