My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members

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

Powered by Google Project Hosting