|
Project Information
|
Fibonacci example : (make-timed-test
test-fib
:code "def fib (n)
curr = 0
succ = 1
presucc = nil
for i in 1..n do
presucc = succ
succ = curr + succ
curr = presucc
end
curr
end"
:call "fib(1000000)"
:return-result nil
:print-function 'print-digits)
* (test-fib)
Evaluation took:
31.734 seconds of real time
31.810000 seconds of total run time (30.070000 user, 1.740000 system)
[ Run times consist of 1.260 seconds GC time, and 30.550 seconds non-GC time. ]
100.24% CPU
3 forms interpreted
50,639,978,358 processor cycles
43,412,830,352 bytes consed
195328212870775773163201494759...<208928 digits>...719893411568996526838242546875
Ruby sub-set Pseudo BNF PROGRAM : COMPSTMT
COMPSTMT : STMT (TERM EXPR)* [TERM]
STMT : CALL
| EXPR
EXPR | ARG
CALL : FUNCTION
FUNCTION : OPERATION [`(' [CALL_ARGS] `)']
ARG : LHS `=' ARG
| ARG `..' ARG
| ARG `+' ARG
| ARG `-' ARG
| ARG `*' ARG
| PRIMARY
PRIMARY : LITERAL
| VARIABLE
| for BLOCK_VAR in EXPR DO
COMPSTMT
end
| def FNAME ARGDECL
COMPSTMT
end
LHS : VARIABLE
CALL_ARGS : ARGS
ARGS : ARG (`,' ARG)*
ARGDECL : `(' ARGLIST `)'
ARGLIST : IDENTIFIER(`,'IDENTIFIER)*
VARIABLE : VARNAME
| nil
LITERAL : numeric
| STRING
TERM : `;'
| `\n'
FNAME : IDENTIFIER
OPERATION : IDENTIFIER
VARNAME : IDENTIFIER
STRING : `"' any_char* `"'
IDENTIFIER is the sequence of characters in the pattern of /[a-zA-Z_][a-zA-Z0-9_]*/.http://jng.imagine27.com/articles/2010-10-07-084756_ruby_subset_implementation.html |