alphalang 0.2.4 β†’ 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbfdb16caf742bce82c36b55c0ac51952e472fb3f286c26e1a3f1114579b6968
4
- data.tar.gz: 3da5256af5667909386065af82d90d34f470ab4203fde1a36fa02dc95b4ba16d
3
+ metadata.gz: 6dbe6c0cb099f96c68feadb26492b409cdb71d2db52fd5e6436a6c142d273584
4
+ data.tar.gz: 215b6ea3d011610dbdb3d2021025c29361df8d6cc4dba74a7a8dabf0d7596fdb
5
5
  SHA512:
6
- metadata.gz: 859580c36eb816c5a7f726b693784f41b0d59fa436d40ce5b9d6ff44661d15041a248c21d896e40c9fbebb9633f1b701298edd933ac1b77ed8a1ab79a4ac92cd
7
- data.tar.gz: e0afd18953789ded0647fba4bece0ae465684957a6d127c3ca17b3d7b1aa1c82679d62c273289800fc510b5dba5c72175c371b5606401f816914ffd826a3ee3c
6
+ metadata.gz: c99ce78b496f2eb91ddb26c799fe51e18e5fb0f2d23d546fcadff0cc7a293c28af455ecad577d43b1e9c4e156f781d17b9ba4b4f7f856861158b68301c23ef77
7
+ data.tar.gz: d6fd552131866752356ce35a82c1ce032dc1863597b1ba618e9f9924fc1d9c2c86a8e595fe64358757156150125ba937350bd422e5818f77f453be9be0882a1a
data/bin/alphalang CHANGED
@@ -5,7 +5,7 @@ require_relative '../lib/rdparse'
5
5
  ALPHA_VER = '0.1.5'.freeze
6
6
  ABORT_ANSWERS = [' ', '', 'none', 'abort'].freeze
7
7
  LOCALES_PATH = File.join(__dir__, '../lib/locales')
8
- PROTECTED_LOCALES = ['.', '..', 'locale_template', 'default', 'default.old', 'en', 'sv', 'de'].freeze
8
+ PROTECTED_LOCALES = ['.', '..', 'locale_template', 'default', 'default.old', 'en', 'sv', 'de', 'emoji'].freeze
9
9
 
10
10
  basic_error_msg = "Usage: alphalang [options] file.alpha\nUsage: alphalang -h for the help menu."
11
11
 
data/lib/locale_lister.rb CHANGED
@@ -20,10 +20,11 @@ def clean_locale_file_to_array(locale_name)
20
20
 
21
21
  clean_locale_file_array = []
22
22
  locale_file.each do |line|
23
- line.scan(/\p{Word}+[|]\p{Word}+|\p{Word}+/) do |word|
24
- clean_locale_file_array << word if word.size > 1
23
+ line.scan(/[\p{Word}\p{Emoji}]+[|][\p{Word}\p{Emoji}]+|[\p{Word}\p{Emoji}]+/) do |word|
24
+ clean_locale_file_array << word if word.size > 1 or word.match?(/\p{Emoji}/)
25
25
  end
26
26
  end
27
+
27
28
  clean_locale_file_array
28
29
  end
29
30
 
data/lib/locales/emoji ADDED
@@ -0,0 +1,18 @@
1
+ ;;.*$ ;;.*$
2
+ while πŸ”
3
+ print πŸ–¨οΈ
4
+ pause ⏸️
5
+ def πŸŽ₯
6
+ end 🏁
7
+ if ❓
8
+ elseif ❔
9
+ else ⁉️
10
+ (false|true) (πŸ‘Ž|πŸ‘)
11
+ (==|<=|>=) (==|<=|>=)
12
+ (not|!) (❌|!)
13
+ (and|&&) (🀞|&&)
14
+ (or|\|\|) (✌️|\|\|)
15
+ \s+ \s+
16
+ \d+ \d+
17
+ \w+ \w+
18
+ . .
@@ -2,30 +2,6 @@
2
2
 
3
3
  ####################################################
4
4
 
5
- class TrueClass
6
- def evaluate
7
- self
8
- end
9
- end
10
-
11
- class FalseClass
12
- def evaluate
13
- self
14
- end
15
- end
16
-
17
- class String
18
- def name
19
- self
20
- end
21
-
22
- def evaluate
23
- self
24
- end
25
- end
26
-
27
- ####################################################
28
-
29
5
  class Node
30
6
  attr_accessor :value
31
7
 
@@ -58,7 +34,6 @@ end
58
34
 
59
35
  class BoolNode < Node
60
36
  def initialize(value)
61
- @value = false
62
37
  @value = true if value == ScopeManager.true_value
63
38
  @value = false if value == ScopeManager.false_value
64
39
  end
@@ -69,32 +44,32 @@ class BoolNode < Node
69
44
  end
70
45
 
71
46
  class AndNode < Node
72
- def initialize(node1, node2)
73
- @node1, @node2 = node1, node2
74
- if @node2.class.method_defined? (:lhs)
75
- if @node2.lhs == nil
76
- @node2.lhs = @node1.lhs
47
+ def initialize(lhs, rhs)
48
+ @lhs, @rhs = lhs, rhs
49
+ if @rhs.class.method_defined? (:lhs)
50
+ if @rhs.lhs == nil
51
+ @rhs.lhs = @lhs.lhs
77
52
  end
78
53
  end
79
54
  end
80
55
 
81
56
  def evaluate
82
- @node1.evaluate && @node2.evaluate
57
+ @lhs.evaluate && @rhs.evaluate
83
58
  end
84
59
  end
85
60
 
86
61
  class OrNode < Node
87
- def initialize(node1, node2)
88
- @node1, @node2 = node1, node2
89
- if @node2.class.method_defined? (:lhs)
90
- if @node2.lhs == nil
91
- @node2.lhs = @node1.lhs
62
+ def initialize(lhs, rhs)
63
+ @lhs, @rhs = lhs, rhs
64
+ if @rhs.class.method_defined? (:lhs)
65
+ if @rhs.lhs == nil
66
+ @rhs.lhs = @lhs.lhs
92
67
  end
93
68
  end
94
69
  end
95
70
 
96
71
  def evaluate
97
- @node1.evaluate || @node2.evaluate
72
+ @lhs.evaluate || @rhs.evaluate
98
73
  end
99
74
  end
100
75
 
@@ -113,8 +88,8 @@ end
113
88
  class CompareNode < Node
114
89
  attr_accessor :lhs, :op, :rhs
115
90
 
116
- def initialize(node1, op, node2)
117
- @lhs, @op, @rhs = node1, op, node2
91
+ def initialize(lhs, op, rhs)
92
+ @lhs, @op, @rhs = lhs, op, rhs
118
93
  end
119
94
 
120
95
  def evaluate
@@ -56,7 +56,11 @@ class ScopeManager
56
56
  end
57
57
 
58
58
  def self.add_to_current_scope(name, value)
59
- @@scopes[@@scope_lvl][name.name] = value.evaluate
59
+ if name.is_a?(String)
60
+ @@scopes[@@scope_lvl][name] = value.evaluate
61
+ else
62
+ @@scopes[@@scope_lvl][name.name] = value.evaluate
63
+ end
60
64
  end
61
65
 
62
66
  def self.add_func_to_global_scope(name, value, args)
@@ -94,32 +94,28 @@ class IfNode < Node
94
94
  end
95
95
 
96
96
  def evaluate
97
- if @argument.evaluate
98
- @value = @node.evaluate
99
- else
100
- @value = nil
101
- end
102
- @value
97
+ @value = @node.evaluate
103
98
  end
104
99
  end
105
100
 
106
101
  class ElseifNode < Node
107
102
  attr_accessor :argument
103
+
108
104
  def initialize(argument, node)
109
105
  @argument, @node = argument, node
110
106
  end
107
+
111
108
  def evaluate
112
- if @argument.evaluate
113
- @value = @node.evaluate
114
- end
109
+ @value = @node.evaluate
115
110
  end
116
111
  end
117
112
 
118
113
  class ElseNode < Node
119
114
  attr_accessor :argument, :node
115
+
120
116
  def initialize(node)
121
117
  @node = node
122
- @argument = true
118
+ @argument = BoolNode.new(ScopeManager.true_value)
123
119
  end
124
120
 
125
121
  def evaluate
@@ -194,6 +190,13 @@ class PrintNode
194
190
  print "Array #{@value.name}: "
195
191
  puts @value.evaluate.join(', ')
196
192
  else
193
+ if @value.evaluate == PrintNode
194
+ if @value.value.is_a?(VariableCallNode)
195
+ raise SyntaxError, "You have a duplicate 'print' statement! Printing #{@value.value.name} twice."
196
+ else
197
+ raise SyntaxError, "You have a duplicate 'print' statement! Printing #{@value.value} twice."
198
+ end
199
+ end
197
200
  puts @value.evaluate
198
201
  end
199
202
  self.class
@@ -0,0 +1,19 @@
1
+ x = 10
2
+
3
+ πŸ” x > 1 🀞 < 20
4
+ ⏸️(0.05)
5
+ πŸ–¨οΈ x
6
+ x = x + 1
7
+ 🏁
8
+
9
+ πŸŽ₯ foo(bar)
10
+ ❓ bar == πŸ‘
11
+ πŸ–¨οΈ bar
12
+ ❔ bar ❌ 5 🀞 ❌ 10
13
+ πŸ–¨οΈ 5
14
+ ⁉️
15
+ πŸ–¨οΈ 0
16
+ 🏁
17
+ 🏁
18
+
19
+ foo(πŸ‘)
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alphalang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - mattias, victor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-10 00:00:00.000000000 Z
11
+ date: 2024-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -66,6 +66,7 @@ files:
66
66
  - lib/locale_lister.rb
67
67
  - lib/locales/de
68
68
  - lib/locales/default
69
+ - lib/locales/emoji
69
70
  - lib/locales/en
70
71
  - lib/locales/locale_template
71
72
  - lib/locales/sv
@@ -74,6 +75,8 @@ files:
74
75
  - lib/nodes/stmtnodes.rb
75
76
  - lib/rdparse.rb
76
77
  - lib/tester/demo_de.alpha
78
+ - lib/tester/demo_emoji.alpha
79
+ - lib/tester/demo_emoji.alpha~
77
80
  - lib/tester/demo_sv.alpha
78
81
  - lib/tester/fibonacci.alpha
79
82
  - lib/tester/test_unit.rb