emoji_lang 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +65 -0
- data/bin/emojit +11 -0
- data/emoji_lang.gemspec +17 -0
- data/lib/parser.rb +80 -0
- data/lib/tokens.rb +35 -0
- data/samples/HelloWorld.emoj +3 -0
- data/samples/fizzbuzz.emoj +15 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -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
|
data/README.md
ADDED
@@ -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)
|
data/bin/emojit
ADDED
data/emoji_lang.gemspec
ADDED
@@ -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
|
data/lib/parser.rb
ADDED
@@ -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
|
data/lib/tokens.rb
ADDED
@@ -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
|
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: []
|