User:Mlforcada/intermediatelanguagefortransfer
Jump to navigation
Jump to search
The first 2 characters of the file are the length of the longest pattern and the number of rules.
Trying to generate a complete transfer machine.
Apparently the stack can hold Booleans, integers, strings (also tags?), superblanks (not strings) and chunks.
It can also hold strings that represent global variables of different types such as lists (this needs to be carefully specified)
Mnemonic | Action |
---|---|
rule [int] | marks the start of a new rule composed of the next [int] characters |
drop | drop the top of the stack |
dup | duplicate the top of the stack |
over | push on top of the stack a copy of the element just below the top of the stack |
swap | swap the two topmost elements in the stack |
"[string]" | pushes the next [int] characters onto the stack as a literal; it can be the name of a var, clip [...] |
[int] | pushes the integer onto the stack |
False | pushes False onto the stack |
True | pushes True onto the stack |
jump [int] | increments the instruction pointer by [int] |
jumponfalse | pops a bool off the stack, increments instruction pointer by [int] if its false |
and | pops two booleans off the stack and pushes whether all of them are true |
or | pops two Boolean off the stack and pushes whether any of them are true |
not | logically negates top of stack |
equal | pop two strings off the stack and push True if they are equal and False otherwise |
equalfold | pop two strings off the stack and push True if they are equal (regardless of case) and False otherwise |
isprefix | pop two strings off the stack and push a Boolean whether the first string popped is a prefix of the second |
isprefixfold | pop two strings off the stack and push a Boolean whether the first string popped is a prefix of the second (regardless of case) |
issuffix | pop two strings off the stack and push a Boolean whether the first string popped is a suffix of the second |
issuffixfold | pop two strings off the stack and push a Boolean whether the first string popped is a suffix of the second (regardless of case) |
issubstring | pop two strings off the stack and push a Boolean whether the first string popped is a substring of the second |
issubstringfold | pop two strings off the stack and push a Boolean whether the first string popped is a substring of the second (regardless of case) |
hasprefix | push whether a prefix of the second string popped is in the list named by the first string popped |
hasprefixfold | push whether a prefix of the second string popped is in the list named by the first string popped (regardless of case) |
hassuffix | push whether a suffix of the second string popped is in the list named by the first string popped |
hassuffixfold | push whether a suffix of the second string popped is in the list named by the first string popped (regardless of case) |
in | push whether the second string popped is a member of the list named by the first string |
infold | push whether the second string popped is a member of the list named by the first string |
fetch | replaces var or clip name on top of the stack with the value contained in the clip or var named. |
store | stores the value of the string below the top of the stack onto the var or clip named by the top of the stack, and pops both values |
printchunk | pops one chunk off the stack and appends it to the output queue (in recursive mode, the output queue is later passed back to the rule applier) |
printlf | prints one lexical form off the stack and appends it to the output queue (...) |
property | pops one string off the stack and then an integer n off the stack, and stores the name of the n-th property [???] |
getcase | pops a string off the stack, pushes string "AA", "Aa", or "aa" depending on its case |
applycase | pops one string off the stack, and modifies the top of stack according to the case pattern of the string popped |
concat | pops two strings off the stack, concatenates them, and pushes the result |
newchunk | push an empty chunk onto the stack |
newlf | push an empty lexical form onto the stack |
lemma | adds the string on top of the stack as pseudolemma to the chunk below it, or as lemma to the lexical form below it |
addtag | appends the string (tag?) on the top of the stack as a tag to the chunk or lexical form below it |
addlf | appends the lexical form on the top of the stack to the chunk below it...?? |
[...] | [do we need more lexical form construction items] |
pseudolemma | pop a chunk off the stack and push its pseudolemma |
blank | push an integer n off the stack and push the n-th superblank onto the stack. If n is out of range (e.g. -1), push a blank containing a single space |