emoji_lang 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3840355519deaef9791057e50e2bdafe00e040e3
4
+ data.tar.gz: ca5d16d668d7d18bafe85f865a4a8ca6812e38a9
5
+ SHA512:
6
+ metadata.gz: a0a3f57af2649705ef381fa6bd7de185b405cf0b40549755018b507f647b794aa5713ba3205486b24a0d3d8a50382bf3104d9211ec8cfdc6be5ed98d5361bf77
7
+ data.tar.gz: b4ece8ff03008d2a3716ddf8e9142839d99df9fabc19439c8d4ef907f02560672b18c534b85f0689e3f43ee53fd4aaa93ddd4295a51b3c920a6bfe49a565864a
@@ -0,0 +1,65 @@
1
+ # Emoji Lang
2
+
3
+ [Emoji Lang](https://github.com/anowell/emoji-lang) on top of any Ruby Virtual Machine.
4
+
5
+ ## INSTALLATION
6
+
7
+ gem install emoji_lang
8
+
9
+ ## USAGE
10
+
11
+ ```ruby
12
+ $ emojit my_script.emoj
13
+ ```
14
+
15
+ Example: [fizzbuzz](samples/fizzbuzz.emoj)
16
+ ```
17
+ $ cat samples/fizzbuzz.emoj
18
+ 🚌
19
+ ✉🖘1
20
+ 🏃 ✉ 🐁❤ 100
21
+ 😸 ✉💣15 ❤ 0
22
+ 🖊 "fizzbuzz"
23
+ 😼 ✉💣3 ❤ 0
24
+ 🖊 "fizz"
25
+ 😼 ✉💣5 ❤ 0
26
+ 🖊 "buzz"
27
+ 😾
28
+ 🖊 ✉
29
+ 🙀
30
+ ✉💪1
31
+ 🚶
32
+ 🎓
33
+ $ emjojit samples/fizzbuzz.emoj
34
+ 1
35
+ 2
36
+ fizz
37
+ 4
38
+ buzz
39
+ fizz
40
+ 7
41
+ 8
42
+ fizz
43
+ buzz
44
+ 11
45
+ fizz
46
+ 13
47
+ 14
48
+ fizzbuzz
49
+ ...
50
+ ```
51
+
52
+ You can turn on debug mode by using the -w option of the Ruby VM:
53
+
54
+ ```ruby
55
+ $ ruby -w bin/emojit samples/HelloWorld.emoj
56
+ L0000: def main
57
+ L0001: puts "hello word"
58
+ L0002: end
59
+ L0003: main
60
+ hello word
61
+ ```
62
+
63
+ ----------
64
+
65
+ Implementation derived heavily from [franckverrot/arnoldc.rb](https://github.com/franckverrot/arnoldc.rb)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ $:<< 'lib'
3
+ require 'parser'
4
+
5
+ parser = Emojit::Parser.new(ARGV[0])
6
+
7
+ # puts "\nemojit..."
8
+
9
+ parser.execute($-w)
10
+
11
+ # puts "\n\nExiting."
@@ -0,0 +1,17 @@
1
+ # coding: utf-8
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "emoji_lang"
5
+ spec.version = "0.1.0"
6
+ spec.authors = ["Anthony Nowell"]
7
+ spec.email = ["anowell@gmail.com"]
8
+ spec.summary = %q{Emoji Lang Ruby implementation}
9
+ spec.description = spec.summary
10
+ spec.homepage = "https://github.com/anowell/emoji-lang"
11
+ spec.license = "GPLv3"
12
+
13
+ spec.files = `git ls-files -z`.split("\x0")
14
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
+
16
+ spec.add_development_dependency "bundler", "~> 1.5"
17
+ end
@@ -0,0 +1,80 @@
1
+ require 'tokens'
2
+ module Emojit
3
+ class Parser
4
+ def initialize(filename)
5
+ @filename = filename || raise(ArgumentError, 'You should provide a script name. eg: ./emojit my_file.emoj')
6
+ end
7
+
8
+ def execute(verbose)
9
+ # READ FILE
10
+ data = File.read(@filename)
11
+
12
+ # DROP LEADING SPACES
13
+ # data.gsub!(/^\s*(.*)/) { $1 }
14
+
15
+ # MAIN PROGRAM
16
+ data.gsub!(/#{BeginMain}/,"def main")
17
+ data.gsub!(/#{EndMethod}|#{EndWhile}|#{EndMain}|#{EndIf}|#{End}/,"end")
18
+
19
+ # MACROS
20
+ data.gsub!(/@#{True}/,"true")
21
+ data.gsub!(/@#{False}/,"false")
22
+
23
+ # CONDITIONALS
24
+ data.gsub!(/#{If} (\w*)/) { "if #{$1}" }
25
+ data.gsub!(/#{ElseIf} (\w*)/) { "elsif #{$1}"}
26
+ data.gsub!(/#{Else}/,"else")
27
+
28
+ # LOOP
29
+ data.gsub!(/#{While} (\w*)/) { "while #{$1}" }
30
+
31
+ # ASSIGNMENTS
32
+ data.gsub!(/#{AssignVariable}/) { " = " }
33
+
34
+ # METHODS
35
+ data.gsub!(/#{DeclareMethod} (\w+)/) { "def #{$1}" }
36
+
37
+ # METHOD CALLS
38
+ data.gsub!(/#{CallMethod} (\w*) (\w+) (\w+)/) { "#{$1}(#{$2}, #{$3})" }
39
+
40
+ # ARITHMETICS
41
+ data.gsub!(/#{MinusOperator}/) { "-" }
42
+ data.gsub!(/#{PlusOperator}/) { "+" }
43
+ data.gsub!(/#{MultiplicationOperator}/) { "*" }
44
+ data.gsub!(/#{DivisionOperator}/) { "/" }
45
+ data.gsub!(/#{ModuloOperator}/) { "%" }
46
+ data.gsub!(/#{PlusEquals}/) { "+=" }
47
+ data.gsub!(/#{MinusEquals}/) { "-=" }
48
+
49
+ # COMPARISONS
50
+ data.gsub!(/#{LessThan}#{EqualTo}/) { "<=" }
51
+ data.gsub!(/#{GreaterThan}#{EqualTo}/) { ">=" }
52
+ data.gsub!(/#{EqualTo}/) { "==" }
53
+ data.gsub!(/#{NotEqualTo}/) { "!=" }
54
+ data.gsub!(/#{GreaterThan}/) { ">" }
55
+ data.gsub!(/#{LessThan}/) { "<" }
56
+ data.gsub!(/#{Or}/) { "||" }
57
+ data.gsub!(/#{And}/) { "&&" }
58
+
59
+ # MORE FUN
60
+ data.gsub!(/#{Return} (\w+)/) { "return #{$1}" }
61
+ data.gsub!(/#{Print} (.*)/) { "puts #{$1}" }
62
+ data.gsub!(/#{RaiseException} (.*)/) { "raise #{$1}" }
63
+ data.gsub!(/#{Loop}/) { "while true" }
64
+ data.gsub!(/#{BreakLoop}/) { "break" }
65
+ data.gsub!(/#{BeginLambda}/) { "{ " }
66
+ data.gsub!(/#{EndLambda}/) { " }" }
67
+
68
+ # WRAPPING IT ALL UP
69
+ locs = data.split("\n").reject { |l| l.empty? } + ["main"]
70
+
71
+ code = locs.join("\n")
72
+
73
+ if verbose
74
+ puts locs.map.with_index { |l,i| "L%04d: %s" % [i, l] }.join("\n")
75
+ end
76
+
77
+ eval(code)
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,35 @@
1
+ BeginMain = "🚌"
2
+ PlusOperator = "🎁"
3
+ MinusOperator = "💳"
4
+ MultiplicationOperator = "👪"
5
+ DivisionOperator = "✂"
6
+ ModuloOperator = "💣"
7
+ EndMain = "🎓"
8
+ Print = "🖊"
9
+ AssignVariable = "🖘"
10
+ PlusEquals = "💪"
11
+ MinusEquals = "🔫"
12
+ False = "👎"
13
+ True = "👍"
14
+ EqualTo = "❤"
15
+ NotEqualTo = "💔"
16
+ GreaterThan = "🐘"
17
+ And = "🐜" # Ant
18
+ Or = "🐗" # Boar
19
+ If = "😸" # Grinning Cat
20
+ Else = "😾" # Pouting Cat
21
+ ElseIf = "😼" # Wry Cat
22
+ EndIf = "🙀" # Weary Cat
23
+ While = "🏃" # Runner
24
+ EndWhile = "🚶" # Pedestrian
25
+ Return = "🚣"
26
+ DeclareMethod = "🙉" # Monkey Hear-no-evil
27
+ EndMethod = "🙊" # Monkey Say-no-evil
28
+ CallMethod = "🙈" # Monkey See-no-evil
29
+ LessThan = "🐁"
30
+ RaiseException = "🖕"
31
+ Loop = "⭕"
32
+ BreakLoop = "🔨"
33
+ BeginLambda = "🌜"
34
+ EndLambda = "🌛"
35
+ End = "👏" # Applause
@@ -0,0 +1,3 @@
1
+ 🚌
2
+ 🖊 "hello word"
3
+ 🎓
@@ -0,0 +1,15 @@
1
+ 🚌
2
+ ✉🖘1
3
+ 🏃 ✉ 🐁❤ 100
4
+ 😸 ✉💣15 ❤ 0
5
+ 🖊 "fizzbuzz"
6
+ 😼 ✉💣3 ❤ 0
7
+ 🖊 "fizz"
8
+ 😼 ✉💣5 ❤ 0
9
+ 🖊 "buzz"
10
+ 😾
11
+ 🖊 ✉
12
+ 🙀
13
+ ✉💪1
14
+ 🚶
15
+ 🎓
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: emoji_lang
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Anthony Nowell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ description: Emoji Lang Ruby implementation
28
+ email:
29
+ - anowell@gmail.com
30
+ executables:
31
+ - emojit
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - README.md
36
+ - bin/emojit
37
+ - emoji_lang.gemspec
38
+ - lib/parser.rb
39
+ - lib/tokens.rb
40
+ - samples/HelloWorld.emoj
41
+ - samples/fizzbuzz.emoj
42
+ homepage: https://github.com/anowell/emoji-lang
43
+ licenses:
44
+ - GPLv3
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 2.4.5
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Emoji Lang Ruby implementation
66
+ test_files: []