Skip to content

Commit

Permalink
Add to_javascript denotational semantics
Browse files Browse the repository at this point in the history
  • Loading branch information
mudge authored and tomstuart committed Jun 4, 2013
1 parent b613ff0 commit 03aa36a
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 0 deletions.
4 changes: 4 additions & 0 deletions the_meaning_of_programs/denotational/add.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ class Add
def to_ruby
"-> e { (#{left.to_ruby}).call(e) + (#{right.to_ruby}).call(e) }"
end

def to_javascript
"function (e) { return (#{left.to_javascript}(e)) + (#{right.to_javascript}(e)); }"
end
end
5 changes: 5 additions & 0 deletions the_meaning_of_programs/denotational/assign.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
require 'execjs/json'
require_relative '../syntax/assign'

class Assign
def to_ruby
"-> e { e.merge({ #{name.inspect} => (#{expression.to_ruby}).call(e) }) }"
end

def to_javascript
"function (e) { e[#{ExecJS::JSON.encode(name)}] = (#{expression.to_javascript}(e)); return e; }"
end
end
5 changes: 5 additions & 0 deletions the_meaning_of_programs/denotational/boolean.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
require 'execjs/json'
require_relative '../syntax/boolean'

class Boolean
def to_ruby
"-> e { #{value.inspect} }"
end

def to_javascript
"function (e) { return #{ExecJS::JSON.encode(value)}; }"
end
end
4 changes: 4 additions & 0 deletions the_meaning_of_programs/denotational/do_nothing.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ class DoNothing
def to_ruby
'-> e { e }'
end

def to_javascript
'function (e) { return e; }'
end
end
7 changes: 7 additions & 0 deletions the_meaning_of_programs/denotational/if.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,11 @@ def to_ruby
" else (#{alternative.to_ruby}).call(e)" +
" end }"
end

def to_javascript
"function (e) { if (#{condition.to_javascript}(e))" +
" { return (#{consequence.to_javascript}(e)); }" +
" else { return (#{alternative.to_javascript}(e)); }" +
" }"
end
end
4 changes: 4 additions & 0 deletions the_meaning_of_programs/denotational/less_than.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ class LessThan
def to_ruby
"-> e { (#{left.to_ruby}).call(e) < (#{right.to_ruby}).call(e) }"
end

def to_javascript
"function (e) { return (#{left.to_javascript}(e)) < (#{right.to_javascript}(e)); }"
end
end
4 changes: 4 additions & 0 deletions the_meaning_of_programs/denotational/multiply.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ class Multiply
def to_ruby
"-> e { (#{left.to_ruby}).call(e) * (#{right.to_ruby}).call(e) }"
end

def to_javascript
"function (e) { return (#{left.to_javascript}(e)) * (#{right.to_javascript}(e)); }"
end
end
5 changes: 5 additions & 0 deletions the_meaning_of_programs/denotational/number.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
require 'execjs/json'
require_relative '../syntax/number'

class Number
def to_ruby
"-> e { #{value.inspect} }"
end

def to_javascript
"function (e) { return #{ExecJS::JSON.encode(value)}; }"
end
end
4 changes: 4 additions & 0 deletions the_meaning_of_programs/denotational/sequence.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ class Sequence
def to_ruby
"-> e { (#{second.to_ruby}).call((#{first.to_ruby}).call(e)) }"
end

def to_javascript
"function (e) { return (#{second.to_javascript}(#{first.to_javascript}(e))); }"
end
end
5 changes: 5 additions & 0 deletions the_meaning_of_programs/denotational/variable.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
require 'execjs/json'
require_relative '../syntax/variable'

class Variable
def to_ruby
"-> e { e[#{name.inspect}] }"
end

def to_javascript
"function (e) { return e[#{ExecJS::JSON.encode(name)}]; }"
end
end
7 changes: 7 additions & 0 deletions the_meaning_of_programs/denotational/while.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,11 @@ def to_ruby
" e" +
" }"
end

def to_javascript
"function (e) {" +
" while (#{condition.to_javascript}(e)) { e = (#{body.to_javascript}(e)); }" +
" return e;" +
" }"
end
end

0 comments on commit 03aa36a

Please sign in to comment.