emoji_lang 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []