Example 8/01: adds actions and infrastructure to compile global higher-order functions.
Classes
Members
-
<constant> mainType :Type
-
Predefined type descriptor for
main (): number.Type:
- Type
-
<constant> numberType :Type
-
Predefined type descriptor for
number.Type:
- Type
-
typeSymbols
-
Type table, maps names to descriptions.
Methods
-
_lift(args)
-
Move function address past arguments to the top of the stack.
Parameters:
Name Type Description argsArray.<Type> list of argument types.
-
add()
-
add: '+' product;checks for number -
args()
-
args: '(' [ sums ] ')';codes call, chains context -
cmp()
-
cmp: sum rel;checks for number -
divide()
-
divide: '/' signed;checks for number -
eq()
-
eq: '=' sum;checks for number -
ge()
-
ge: '>=' sum;checks for number -
gt()
-
gt: '>' sum;checks for number -
input()
-
input: 'input' [ Number ];returns `this.numberType -
le()
-
le: '<=' sum;checks for number -
lt()
-
lt: '<' sum;checks for number -
multiply()
-
multiply: '*' signed;checks for number -
name()
-
name: symbol [{ args }]; -
ne()
-
ne: '<>' sum;checks for number -
number()
-
number: Number;returnsthis.numberType -
parms()
-
parms: '(' [ names ] ')' [ ':' Name ];declares -
print()
-
print: 'print' sums;checks types -
product()
-
product: signed [{ multiply | divide }];returns signed -
prog()
-
prog: [ typedcls ] [ vars ] funs; -
return()
-
return: 'return' [ sum ]; -
signed()
-
signed: [ '-' ] term;checks for number, returns term -
store()
-
store: '=' sum;expects context, codes assignment -
subtract()
-
subtract: '-' product;checks for number -
sum()
-
sum: product [{ add | subtract }];returns product -
sums()
-
sums: sum [{ ',' sum }];returns list of types -
term()
-
term: input | number | name | '(' sum ')';returns type -
type()
-
type: Name | 'number';returns type symbol -
typedcl()
-
typedcl: Name '(' [ types ] ')' [ ':' typename ];declares -
typedcls()
-
typedcls: { 'type' typedcl [{ ',' typedcl }] ';' };checks and translates the types -
typename()
-
typename: Name | 'number';returns name or 'number' -
types()
-
types: typename [{ ',' typename }];returns list -
varname()
-
varname: Name [ ':' type ];declares the name. Can be used with one or two arguments, defaults tonumber.