my_precious 0.2.0 → 0.2.1

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: e5c18ec277c010e718d3f52a2296caec5f556dc95f961a7f39e6f75abe43aabd
4
- data.tar.gz: c750e66840fe41511b26a2aa4be59ecf611c096bfd3213731703d54d0f70da4b
3
+ metadata.gz: dea782367a57a0e807099bf2eeb607fbb2f9c8ec86543a32eff54b9922357558
4
+ data.tar.gz: 37e93e35f2b66f4488d8425eae01486754c1ed330a4c3b9cf5aa5603e599bf66
5
5
  SHA512:
6
- metadata.gz: 9eb640feaecaa15025a08d722ee751db911c23e8461e49c68784b856a10aad87bb28e2e59537f97efa47dbfe0abf91830c380b8d95206646f798112b6bff0c50
7
- data.tar.gz: f77cd35b4a1463ddb01ae5cc9b043b7ad76281c9109fca8f3c73f18155d76743894266892b3f3a842afdac5126230244331cfbbf3547a646764c282081094bef
6
+ metadata.gz: 46ee3935305e54029251a2fda9e81356675d88e9fe3dffafadea51368a76126d420cefdc0f37c5ad86fdf471970f479d8d12806bff620f76146b082ab6232b54
7
+ data.tar.gz: c3f2911ea732dc91adf5b3accdf8d68af1466d8970fa096e47308edf20d04835638355c12c79a80613d14ffe058588ab8a03fee636a2b8f77b2daf31115b9825
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- my_precious (0.2.0)
4
+ my_precious (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,15 +1,15 @@
1
- # MyPrecious
1
+ # Precious
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/my_precious`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ I wanted to make a fun programming language so I did it.
4
+ It's all my own, my precious... Precious is a LOTR esoteric programming language translator.
5
+ Precious uses lore keywords and english to create simple programming functionality.
6
6
 
7
7
  ## Installation
8
8
 
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'my_precious'
12
+ gem 'precious'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,11 +18,147 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install my_precious
21
+ $ gem install precious
22
+
23
+ ## Syntax:
24
+ Welcome to the Fellowship!
25
+
26
+ the my_precious gem is designed to find and hold on to keywords and ignore everything else.
27
+ this allows users to create their own stories in the Precious language that is then translated to valid Ruby code.
28
+
29
+ each piece of code you write in Precious must be written on its own new line in your text editor of choice.
30
+
31
+ now, in the words of Gandalf the Gray, “All we have to decide is what to do with the time that is given us.”
32
+
33
+
34
+ # variables
35
+ use capitols
36
+
37
+ Frodo is 8 years old
38
+
39
+ # strings
40
+ use double quotes
41
+
42
+ Frodo is "a hobbit"
43
+
44
+ # integers
45
+ write normally
46
+
47
+ Orcs are 2 big
48
+
49
+ # commenting
50
+ use the keywords: 'second breakfast', 'wear the ring'
51
+
52
+ `i love second breakfast Sam is going to be a number`
53
+ `wear the ring Frodo`
54
+
55
+ everything that comes after 'second breakfast' will be commented out.
56
+ everything before 'second breakfast' will not.
57
+
58
+ # puts
59
+ use the keywords: 'bring forth the ring', 'says', 'screams', 'exclaims', 'sobbs' or 'coughs'
60
+
61
+ `bring forth the ring Frodo`
62
+ `gandalf says "they're taking the hobbits to Isengard"`
63
+
64
+ # assignment
65
+ use the keywords: 'is', 'has', 'are'
66
+
67
+ `Frodo is 8`
68
+ `Elves are worried when they saw 7 hobbits approaching the lair`
69
+
70
+ # increment
71
+ use the keywords: 'eats lembas bread', 'fortifies stronghold', 'rests', 'recieves Evenstar' or 'reforges Narsil'
72
+
73
+ `Frodo eats lembas bread`
74
+
75
+ # decrement
76
+ use the keywords: 'runs out of lembas bread', 'lost' or 'hunted by orcs'
77
+
78
+ `Sam runs out of lembas bread`
79
+ `Pippin gets hunted by orcs`
80
+
81
+ # addition
82
+ use the keywords: 'joins', 'and' or 'accompanies'
83
+
84
+ Frodo joins the fellowship with a Nazgul
85
+ Gollum and Frodo went inside mordor
86
+
87
+ # subtraction
88
+ use the keywords: 'leaves the fellowship', 'stabs', 'banishes' or 'steals'
89
+
90
+ Sam leaves the fellowship without telling Sam
91
+ a Wraith accidentally stabs Sauron in the face at a really important business meeting
92
+
93
+ # multiplication
94
+ use the keywords: 'gives aid to', 'procreates' or 'bolsters'
95
+
96
+ Arigorn bolsters Helmsdeep
97
+
98
+ # division
99
+ use the keywords: 'decapitates' or 'dismembers'
100
+
101
+ Gimly dismembers Legolas
102
+
103
+ # true
104
+ use the keywords: 'precious'
105
+
106
+ Legolas is precious
107
+
108
+ #negation
109
+ use keywords: 'not'
110
+
111
+ the Balrog is not precious
112
+
113
+ # loops
114
+ use the keywords: 'whilst' or 'during the journey'
115
+
116
+ whilst Frodo climed as strong as he could, Saruman cried, nooo!!
117
+
118
+ # comparisons
119
+ use keywords: 'equal', 'same' or 'similar'
120
+
121
+ Gollum can be the same as Smeagol
122
+
123
+ # greater/less than
124
+ use keywords: 'stronger than' or 'more' and 'weaker than' or 'less'
125
+
126
+ Bilbo ate more tree food than Treebeard
127
+
128
+ # conditionals
129
+ use keywords: 'does', 'if' or 'will'
130
+
131
+ will Mary equal Pippin?
132
+
133
+ # end
134
+ use keywords: 'you shall not pass'
135
+
136
+ you shall not pass
137
+
138
+ #defining a function
139
+ use keywords: 'transcribe' or 'tell a story'
140
+
141
+ transcribe the book about Mordor
142
+
143
+ #calling a function
144
+ use keywords: "theyre taking the hobbits to"
145
+
146
+ they are taking the hobbits to Mordor
147
+
148
+ #establishing parameters
149
+ use keywords: 'with'
150
+
151
+ they are taking the hobbits to Mordor with Nazgul, Frodo
152
+
153
+ everything after the keyword 'with' is a parameter. use a ',' or ' ' to separate parameters
154
+
155
+ #class words
156
+ use keywords: 'chapter :'
22
157
 
23
- ## Usage
158
+ chapter : TheMines
24
159
 
25
- TODO: Write usage instructions here
160
+ the format here is important. everything after the ':' will be considered a classname.
161
+ classnames must be capitalized
26
162
 
27
163
  ## Development
28
164
 
@@ -32,7 +168,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
168
 
33
169
  ## Contributing
34
170
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/<github username>/my_precious. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
171
+ Bug reports and pull requests are welcome on GitHub at https://github.com/<github username>/precious. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
172
 
37
173
  ## License
38
174
 
@@ -40,4 +176,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
40
176
 
41
177
  ## Code of Conduct
42
178
 
43
- Everyone interacting in the MyPrecious project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<github username>/my_precious/blob/master/CODE_OF_CONDUCT.md).
179
+ Everyone interacting in the Precious project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<github username>/precious/blob/master/CODE_OF_CONDUCT.md).
@@ -1,38 +1,33 @@
1
- require 'pry'
2
-
3
1
  class Parser
2
+ WRITER_FILE = 'output.rb'
4
3
  # KEYWORDS
4
+ #LINE_KEYWORDS = [',', '.', '?', '!', ';']
5
5
  PUT_KEYWORDS = ['bring forth the ring', 'says', 'screams', 'exclaims', 'sobbs', 'coughs']
6
6
  COMMENT_KEYWORDS = ['second breakfast', 'wear the ring']
7
- ASSIGNMENT_KEYWORDS = ['is', 'has', 'was']
7
+ ASSIGNMENT_KEYWORDS = ['is', 'are', 'was', 'has']
8
8
  INCREMENT_KEYWORDS = ['eats lembas bread', 'fortifies stronghold', 'rests', 'recieves Evenstar', 'reforges Narsil']
9
9
  DECREMENT_KEYWORDS = ['runs out of lembas bread', 'lost', 'hunted by orcs']
10
10
  ADDITION_KEYWORDS = ['joins', 'join', 'and', 'accompanies']
11
11
  SUBTRACTION_KEYWORDS = ['leaves the fellowship', 'stabs', 'banishes', 'steals']
12
12
  MULTIPLICATION_KEYWORDS = ['gives aid to', 'procreates', 'bolsters']
13
13
  DIVISION_KEYWORDS = ['decapitates', 'dismembers']
14
- COMPARISON_KEYWORDS = ['same', 'equal']
14
+ COMPARISON_KEYWORDS = ['equal', 'same', 'similar']
15
15
  CONDITION_KEYWORDS = ['does', 'if', 'will']
16
16
  END_KEYWORDS = ['you shall not pass']
17
17
  TRUE_KEYWORDS = ['precious']
18
- FALSE_KEYWORDS = ['not precious']
19
18
  LOOP_KEYWORDS = ['whilst', 'during the journey']
20
19
  GREATER_THAN_KEYWORDS = ['stronger than', 'more']
21
20
  LESS_THAN_KEYWORDS = ['weaker than', 'less']
22
- OPERATOR_KEYWORDS = ['#', '+', '-', '=', '*', '/', '+=1', '-=1', 'puts', '==', 'if', 'end', 'true', 'false', 'while', '>', '<']
23
-
21
+ FUNCTION_DEF_KEYWORDS = ['transcribe', 'tell a story']
22
+ FUNCTION_CALL_KEYWORDS = ["theyre taking the hobbits to"]
23
+ PARAM_KEYWORDS = ['with']
24
+ NEGATION_KEYWORDS = ['not']
25
+ CLASS_KEYWORDS = ['chapter']
26
+ OPERATOR_KEYWORDS = ['#', '+', '-', '=', '*', '/', '+=1', '-=1', 'puts', '==', 'if', 'end', 'true', 'while', '>', '<', '!', 'def', '(', ')', 'class']
24
27
 
25
- ALICIA_KEYS = [PUT_KEYWORDS, COMMENT_KEYWORDS, ASSIGNMENT_KEYWORDS,
26
- INCREMENT_KEYWORDS, DECREMENT_KEYWORDS, ADDITION_KEYWORDS,
27
- SUBTRACTION_KEYWORDS, DIVISION_KEYWORDS, MULTIPLICATION_KEYWORDS,
28
- COMPARISON_KEYWORDS, CONDITION_KEYWORDS, END_KEYWORDS, TRUE_KEYWORDS, FALSE_KEYWORDS, LOOP_KEYWORDS, GREATER_THAN_KEYWORDS, LESS_THAN_KEYWORDS]
28
+ ALICIA_KEYS = [END_KEYWORDS, PUT_KEYWORDS, ASSIGNMENT_KEYWORDS, INCREMENT_KEYWORDS, DECREMENT_KEYWORDS, ADDITION_KEYWORDS, SUBTRACTION_KEYWORDS, DIVISION_KEYWORDS, MULTIPLICATION_KEYWORDS, COMPARISON_KEYWORDS, CONDITION_KEYWORDS, TRUE_KEYWORDS, LOOP_KEYWORDS, GREATER_THAN_KEYWORDS, LESS_THAN_KEYWORDS, NEGATION_KEYWORDS, FUNCTION_DEF_KEYWORDS, FUNCTION_CALL_KEYWORDS, CLASS_KEYWORDS]
29
29
 
30
- MAP = [{'puts': PUT_KEYWORDS}, {'#': COMMENT_KEYWORDS},
31
- {'=': ASSIGNMENT_KEYWORDS}, {'+=1': INCREMENT_KEYWORDS},
32
- {'-=1': DECREMENT_KEYWORDS}, {'+': ADDITION_KEYWORDS},
33
- {'-': SUBTRACTION_KEYWORDS}, {'*': MULTIPLICATION_KEYWORDS},
34
- {'/': DIVISION_KEYWORDS}, {'==': COMPARISON_KEYWORDS},
35
- {'if': CONDITION_KEYWORDS}, {'end': END_KEYWORDS}, {'true': TRUE_KEYWORDS}, {'false': FALSE_KEYWORDS}, {'while': LOOP_KEYWORDS}, {'>': GREATER_THAN_KEYWORDS}, {'<': LESS_THAN_KEYWORDS}]
30
+ MAP = [{'puts': PUT_KEYWORDS}, {'#': COMMENT_KEYWORDS}, {'=': ASSIGNMENT_KEYWORDS}, {'+=1': INCREMENT_KEYWORDS}, {'-=1': DECREMENT_KEYWORDS}, {'+': ADDITION_KEYWORDS}, {'-': SUBTRACTION_KEYWORDS}, {'*': MULTIPLICATION_KEYWORDS}, {'/': DIVISION_KEYWORDS}, {'==': COMPARISON_KEYWORDS}, {'if': CONDITION_KEYWORDS}, {'end': END_KEYWORDS}, {'true': TRUE_KEYWORDS}, {'while': LOOP_KEYWORDS}, {'>': GREATER_THAN_KEYWORDS}, {'<': LESS_THAN_KEYWORDS}, {'!': NEGATION_KEYWORDS}, {'def': FUNCTION_DEF_KEYWORDS}, {'': FUNCTION_CALL_KEYWORDS},{'(': PARAM_KEYWORDS}, {'class': CLASS_KEYWORDS}]
36
31
 
37
32
  def self.parse_file(file, output_file_name)
38
33
  str = ""
@@ -47,7 +42,6 @@ class Parser
47
42
  end
48
43
 
49
44
  def self.parse_line(line, index)
50
-
51
45
  #error handeling
52
46
  #ignore lines of length 1, its empty
53
47
  if line.length == 1
@@ -55,54 +49,78 @@ class Parser
55
49
  return line
56
50
  else
57
51
 
58
- #check if there are strings in line
59
- quote = ""
60
- if line.include? '"'
61
- quote = get_string(line)
62
- line = line.gsub(quote, 'quote_placeholder')
63
- end
52
+ #check if there are strings in line
53
+ quote = ""
54
+ if line.include? '"'
55
+ quote = get_quote(line)
56
+ line = line.gsub(quote, 'quote_placeholder')
57
+ end
64
58
 
65
- #check if line is a comment
66
- comment = ""
67
- if COMMENT_KEYWORDS.any? { |word| line.include?(word) }
68
- line = parse(line, COMMENT_KEYWORDS)
69
- comment = get_comment(line)
70
- line = line.gsub(comment, 'comment_placeholder')
71
- end
59
+ #check if line is a comment
60
+ comment = ""
61
+ if COMMENT_KEYWORDS.any? { |word| line.include?(word) }
62
+ line = parse(line, COMMENT_KEYWORDS)
63
+ comment = store_important(line, '#')
64
+ line = line.gsub(comment, 'comment_placeholder')
65
+ end
72
66
 
73
- #get rid of special chars
74
- line_array = line.split(" ")
75
- line_array.each_with_index do |word, index|
76
- line_array[index] = purify(word)
77
- end
67
+ #check if line has params
68
+ params = ""
69
+ if ((PARAM_KEYWORDS.any? { |word| line.include?(word) }) &&
70
+ ((FUNCTION_DEF_KEYWORDS.any? { |word| line.include?(word) }) ||
71
+ (FUNCTION_CALL_KEYWORDS.any? { |word| line.include?(word) })))
72
+ line = parse(line, PARAM_KEYWORDS)
73
+ params = remove_newline(store_important(line, '('))
74
+ line = line.gsub(params, 'param_placeholder ') + ')'
75
+ end
78
76
 
79
- #check for keywords
80
- #calls if statements
81
- line = line_array.join(" ")
82
- line = check_for_keywords(line)
77
+ class_word = ""
78
+ if CLASS_KEYWORDS.any? { |word| line.include?(word) }
79
+ line = parse(line, CLASS_KEYWORDS)
80
+ class_word = store_important(line, ':')
81
+ line = line.gsub(class_word, ' class_word_placeholder')
82
+ end
83
83
 
84
- #remove extra english words
85
- line = only_valuable_words(line).downcase
84
+ #get rid of special chars
85
+ line_array = line.split(" ")
86
+ line_array.each_with_index do |word, index|
87
+ line_array[index] = purify(word)
88
+ end
86
89
 
87
- #put string back into line
88
- if line.include? ('"quote_placeholder"')
89
- line = line.gsub('quote_placeholder', quote)
90
- end
90
+ #check for keywords
91
+ #calls if statements
92
+ line = line_array.join(" ")
93
+ line = check_for_keywords(line)
91
94
 
92
- if line.include? ('comment_placeholder')
93
- line = line.gsub('comment_placeholder', comment)
94
- end
95
- #puts "end line: #{line}"
96
- # write("#{line}")
97
- return line
95
+ #remove extra english words
96
+ line = only_valuable_words(line).downcase
97
+
98
+ #put string back into line
99
+ if line.include? ('"quote_placeholder"')
100
+ line = line.gsub('quote_placeholder', quote)
101
+ end
102
+
103
+ if line.include? ('comment_placeholder')
104
+ line = line.gsub('comment_placeholder', comment)
105
+ end
106
+
107
+ if line.include? ('param_placeholder')
108
+ line = line.gsub('param_placeholder', params.downcase)
109
+ line = format_function(line)
110
+ end
111
+
112
+ if line.include? ('class_word_placeholder')
113
+ line = line.gsub('class_word_placeholder', "#{class_word}")
114
+ end
115
+
116
+ # write("#{line}")
117
+ return line
98
118
  end
99
119
  end
100
120
 
101
121
  def self.check_for_keywords(line)
102
122
  ALICIA_KEYS.each do |keywords|
103
- if keywords.any? { |word| line.include?(word) }
104
- line = parse(line, keywords)
105
- end
123
+ line = parse(line, keywords)
106
124
  end
107
125
  line
108
126
  end
@@ -111,6 +129,7 @@ class Parser
111
129
  def self.parse(line, keywords)
112
130
  keywords.each do |keyword|
113
131
  if line.include? keyword
132
+ puts keyword
114
133
  replacement = find_replacement(keywords)
115
134
  line = line.gsub(keyword, replacement)
116
135
  end
@@ -119,7 +138,11 @@ class Parser
119
138
  end
120
139
 
121
140
  def self.purify(word)
122
- word = word.gsub(/[!@%&.?,]/,'') # get rid of special chars
141
+ word = word.gsub(/[!@%&.?,]/,'')# get rid of special chars
142
+ end
143
+
144
+ def self.remove_newline(line)
145
+ line.gsub(/\n/, "")
123
146
  end
124
147
 
125
148
  def self.only_valuable_words(line)
@@ -138,9 +161,13 @@ class Parser
138
161
  valuable = false
139
162
  if /[[:upper:]]/.match(word[0]) #if variable
140
163
  valuable = true
141
- elsif word == '"quote_placeholder"' #if string
164
+ elsif word == '"quote_placeholder"' #if string/quote
165
+ valuable = true
166
+ elsif word == '#comment_placeholder' #if comment
167
+ valuable = true
168
+ elsif word == '(param_placeholder' #if params
142
169
  valuable = true
143
- elsif word == '#comment_placeholder' #if string
170
+ elsif word == 'class_word_placeholder' #if class
144
171
  valuable = true
145
172
  elsif word.to_i.to_s == word #if num
146
173
  valuable = true
@@ -150,7 +177,7 @@ class Parser
150
177
  valuable
151
178
  end
152
179
 
153
- def self.get_string(phrase)
180
+ def self.get_quote(phrase)
154
181
  phrase_array = phrase.split('')
155
182
  index = phrase_array.find_index { |i| i == '"'} + 1
156
183
  quote = ""
@@ -161,15 +188,15 @@ class Parser
161
188
  quote
162
189
  end
163
190
 
164
- def self.get_comment(phrase)
191
+ def self.store_important(phrase, key)
165
192
  phrase_array = phrase.split('')
166
- index = phrase_array.find_index { |i| i == '#'} + 1
167
- comment = ""
193
+ index = phrase_array.find_index { |i| i == key} + 1
194
+ string = ""
168
195
  while index < phrase_array.length
169
- comment << phrase_array[index]
196
+ string << phrase_array[index]
170
197
  index += 1
171
198
  end
172
- comment
199
+ string
173
200
  end
174
201
 
175
202
  def self.find_replacement(keywords)
@@ -180,11 +207,20 @@ class Parser
180
207
  end
181
208
  end
182
209
  end
210
+ return nil
211
+ end
212
+
213
+ def self.format_function(line)
214
+ phrase_array = line.split('')
215
+ index = phrase_array.find_index { |i| i == "("}
216
+ phrase_array.delete_at(index - 1)
217
+ phrase_array.delete_at(index - 2)
218
+ phrase_array.join("")
183
219
  end
184
220
 
185
221
  def self.write(str, writer_file_name)
186
222
  writer_file = File.open(writer_file_name, 'w')
187
223
  writer_file.write(str)
188
224
  end
189
-
190
- end
225
+
226
+ end #end of Parser Class
@@ -1,3 +1,3 @@
1
1
  module MyPrecious
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/my_precious.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'thor'
2
2
  require 'my_precious/version'
3
- require 'my_precious/parser_2'
3
+ require 'my_precious/parser'
4
4
 
5
5
  module MyPrecious
6
6
  class Error < StandardError; end
@@ -8,22 +8,28 @@ module MyPrecious
8
8
  class CLI < Thor
9
9
 
10
10
  desc 'bring_forth FILE', 'creates a .precious FILE where users can write their LOTR code'
11
- def bring_forth(file_name)
11
+ def forge(file_name)
12
12
  file = File.open(file_name + '.precious', 'w')
13
- puts "You have succesfully brought forth #{file_name}.precious"
13
+ puts "You have succesfully forged #{file_name}.precious"
14
14
  end
15
15
 
16
16
  desc 'parse FILE', 'parse a .precious FILE and output the result'
17
- def parse reader_file_name, writer_file_name
17
+ def bring_forth(reader_file_name, writer_file_name)
18
18
  exts_are_valid = check_reader_and_writer_exts(reader_file_name, writer_file_name)
19
19
  if exts_are_valid
20
20
  file = File.open(reader_file_name, 'r')
21
- Parser2.parse_file file, writer_file_name
21
+ Parser.parse_file file, writer_file_name
22
22
  puts "You have successfully transcribed #{reader_file_name}.precious into #{writer_file_name}"
23
23
  file.close
24
24
  end
25
25
  end
26
26
 
27
+ def destroy(file_name)
28
+ if File.exist?(file_name)
29
+ File.delete(file_name)
30
+ end
31
+ end
32
+
27
33
  # def speak_friend file_name
28
34
  # isvalid = check_ext(file_name)
29
35
  # if isvalid
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_precious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jessicabettsftw
@@ -79,7 +79,6 @@ files:
79
79
  - lib/my_precious.rb
80
80
  - lib/my_precious/cli.rb
81
81
  - lib/my_precious/parser.rb
82
- - lib/my_precious/parser_2.rb
83
82
  - lib/my_precious/version.rb
84
83
  - middle_earth.precious
85
84
  - my_precious.gemspec
@@ -1,222 +0,0 @@
1
- class Parser2
2
- WRITER_FILE = 'output.rb'
3
- # KEYWORDS
4
- #LINE_KEYWORDS = [',', '.', '?', '!', ';']
5
- PUT_KEYWORDS = ['bring forth the ring', 'says', 'screams', 'exclaims', 'sobbs', 'coughs']
6
- COMMENT_KEYWORDS = ['second breakfast', 'wear the ring']
7
- ASSIGNMENT_KEYWORDS = ['is', 'are', 'was', 'has']
8
- INCREMENT_KEYWORDS = ['eats lembas bread', 'fortifies stronghold', 'rests', 'recieves Evenstar', 'reforges Narsil']
9
- DECREMENT_KEYWORDS = ['runs out of lembas bread', 'lost', 'hunted by orcs']
10
- ADDITION_KEYWORDS = ['joins', 'join', 'and', 'accompanies']
11
- SUBTRACTION_KEYWORDS = ['leaves the fellowship', 'stabs', 'banishes', 'steals']
12
- MULTIPLICATION_KEYWORDS = ['gives aid to', 'procreates', 'bolsters']
13
- DIVISION_KEYWORDS = ['decapitates', 'dismembers']
14
- COMPARISON_KEYWORDS = ['equal', 'same', 'similar']
15
- CONDITION_KEYWORDS = ['does', 'if', 'will']
16
- END_KEYWORDS = ['you shall not pass']
17
- TRUE_KEYWORDS = ['precious']
18
- LOOP_KEYWORDS = ['whilst', 'during the journey']
19
- GREATER_THAN_KEYWORDS = ['stronger than', 'more']
20
- LESS_THAN_KEYWORDS = ['weaker than', 'less']
21
- FUNCTION_DEF_KEYWORDS = ['transcribe', 'tell a story']
22
- FUNCTION_CALL_KEYWORDS = ["theyre taking the hobbits to"]
23
- PARAM_KEYWORDS = ['with']
24
- NEGATION_KEYWORDS = ['not']
25
- CLASS_KEYWORDS = ['chapter']
26
- OPERATOR_KEYWORDS = ['#', '+', '-', '=', '*', '/', '+=1', '-=1', 'puts', '==', 'if', 'end', 'true', 'while', '>', '<', '!', 'def', '(', ')', 'class']
27
-
28
- ALICIA_KEYS = [END_KEYWORDS, PUT_KEYWORDS, ASSIGNMENT_KEYWORDS, INCREMENT_KEYWORDS, DECREMENT_KEYWORDS, ADDITION_KEYWORDS, SUBTRACTION_KEYWORDS, DIVISION_KEYWORDS, MULTIPLICATION_KEYWORDS, COMPARISON_KEYWORDS, CONDITION_KEYWORDS, TRUE_KEYWORDS, LOOP_KEYWORDS, GREATER_THAN_KEYWORDS, LESS_THAN_KEYWORDS, NEGATION_KEYWORDS, FUNCTION_DEF_KEYWORDS, FUNCTION_CALL_KEYWORDS, CLASS_KEYWORDS]
29
-
30
- MAP = [{'puts': PUT_KEYWORDS}, {'#': COMMENT_KEYWORDS}, {'=': ASSIGNMENT_KEYWORDS}, {'+=1': INCREMENT_KEYWORDS}, {'-=1': DECREMENT_KEYWORDS}, {'+': ADDITION_KEYWORDS}, {'-': SUBTRACTION_KEYWORDS}, {'*': MULTIPLICATION_KEYWORDS}, {'/': DIVISION_KEYWORDS}, {'==': COMPARISON_KEYWORDS}, {'if': CONDITION_KEYWORDS}, {'end': END_KEYWORDS}, {'true': TRUE_KEYWORDS}, {'while': LOOP_KEYWORDS}, {'>': GREATER_THAN_KEYWORDS}, {'<': LESS_THAN_KEYWORDS}, {'!': NEGATION_KEYWORDS}, {'def': FUNCTION_DEF_KEYWORDS}, {'': FUNCTION_CALL_KEYWORDS},{'(': PARAM_KEYWORDS}, {'class': CLASS_KEYWORDS}]
31
-
32
- def self.parse_file(file, output_file_name)
33
- str = ""
34
- writer_file_name = output_file_name
35
- file.each_with_index do |file, index|
36
- file.each_line do |line|
37
- line = parse_line(line, index)
38
- str << (line + "\n")
39
- end
40
- end
41
- write(str, writer_file_name)
42
- end
43
-
44
- def self.parse_line(line, index)
45
- #error handeling
46
- #ignore lines of length 1, its empty
47
- if line.length == 1
48
- # write("#{line}")
49
- return line
50
- else
51
-
52
- #check if there are strings in line
53
- quote = ""
54
- if line.include? '"'
55
- quote = get_quote(line)
56
- line = line.gsub(quote, 'quote_placeholder')
57
- end
58
-
59
- #check if line is a comment
60
- comment = ""
61
- if COMMENT_KEYWORDS.any? { |word| line.include?(word) }
62
- line = parse(line, COMMENT_KEYWORDS)
63
- comment = store_important(line, '#')
64
- line = line.gsub(comment, 'comment_placeholder')
65
- end
66
-
67
- #check if line has params
68
- params = ""
69
- if ((PARAM_KEYWORDS.any? { |word| line.include?(word) }) &&
70
- ((FUNCTION_DEF_KEYWORDS.any? { |word| line.include?(word) }) ||
71
- (FUNCTION_CALL_KEYWORDS.any? { |word| line.include?(word) })))
72
- line = parse(line, PARAM_KEYWORDS)
73
- params = remove_newline(store_important(line, '('))
74
- line = line.gsub(params, 'param_placeholder ') + ')'
75
- end
76
-
77
- class_word = ""
78
- if CLASS_KEYWORDS.any? { |word| line.include?(word) }
79
- line = parse(line, CLASS_KEYWORDS)
80
- class_word = store_important(line, ':')
81
- line = line.gsub(class_word, ' class_word_placeholder')
82
- end
83
-
84
- #get rid of special chars
85
- line_array = line.split(" ")
86
- line_array.each_with_index do |word, index|
87
- line_array[index] = purify(word)
88
- end
89
-
90
- #check for keywords
91
- #calls if statements
92
- line = line_array.join(" ")
93
- line = check_for_keywords(line)
94
-
95
- #remove extra english words
96
- line = only_valuable_words(line).downcase
97
-
98
- #put string back into line
99
- if line.include? ('"quote_placeholder"')
100
- line = line.gsub('quote_placeholder', quote)
101
- end
102
-
103
- if line.include? ('comment_placeholder')
104
- line = line.gsub('comment_placeholder', comment)
105
- end
106
-
107
- if line.include? ('param_placeholder')
108
- line = line.gsub('param_placeholder', params.downcase)
109
- line = format_function(line)
110
- end
111
-
112
- if line.include? ('class_word_placeholder')
113
- line = line.gsub('class_word_placeholder', "#{class_word}")
114
- end
115
-
116
- # write("#{line}")
117
- return line
118
- end
119
- end
120
-
121
- def self.check_for_keywords(line)
122
- ALICIA_KEYS.each do |keywords|
123
- line = parse(line, keywords)
124
- end
125
- line
126
- end
127
-
128
- # METHODS
129
- def self.parse(line, keywords)
130
- keywords.each do |keyword|
131
- if line.include? keyword
132
- puts keyword
133
- replacement = find_replacement(keywords)
134
- line = line.gsub(keyword, replacement)
135
- end
136
- end
137
- return line
138
- end
139
-
140
- def self.remove_newline(line)
141
- line.gsub(/\n/, "")
142
- end
143
-
144
- def self.only_valuable_words(line)
145
- important_words = []
146
- line_array = line.split(" ")
147
- line_array.each do |word|
148
- valuable_word = valuable?(word)
149
- if valuable_word
150
- important_words << word
151
- end
152
- end
153
- line = important_words.join(" ")
154
- end
155
-
156
- def self.valuable?(word)
157
- valuable = false
158
- if /[[:upper:]]/.match(word[0]) #if variable
159
- valuable = true
160
- elsif word == '"quote_placeholder"' #if string/quote
161
- valuable = true
162
- elsif word == '#comment_placeholder' #if comment
163
- valuable = true
164
- elsif word == '(param_placeholder' #if params
165
- valuable = true
166
- elsif word == 'class_word_placeholder' #if class
167
- valuable = true
168
- elsif word.to_i.to_s == word #if num
169
- valuable = true
170
- elsif OPERATOR_KEYWORDS.include? word #if operator
171
- valuable = true
172
- end
173
- valuable
174
- end
175
-
176
- def self.get_quote(phrase)
177
- phrase_array = phrase.split('')
178
- index = phrase_array.find_index { |i| i == '"'} + 1
179
- quote = ""
180
- while phrase_array[index] != '"'
181
- quote << phrase_array[index]
182
- index += 1
183
- end
184
- quote
185
- end
186
-
187
- def self.store_important(phrase, key)
188
- phrase_array = phrase.split('')
189
- index = phrase_array.find_index { |i| i == key} + 1
190
- string = ""
191
- while index < phrase_array.length
192
- string << phrase_array[index]
193
- index += 1
194
- end
195
- string
196
- end
197
-
198
- def self.find_replacement(keywords)
199
- MAP.each do |hash|
200
- hash.each do |key, value|
201
- if value == keywords
202
- return key.to_s
203
- end
204
- end
205
- end
206
- return nil
207
- end
208
-
209
- def self.format_function(line)
210
- phrase_array = line.split('')
211
- index = phrase_array.find_index { |i| i == "("}
212
- phrase_array.delete_at(index - 1)
213
- phrase_array.delete_at(index - 2)
214
- phrase_array.join("")
215
- end
216
-
217
- def self.write(str, writer_file_name)
218
- writer_file = File.open(writer_file_name, 'w')
219
- writer_file.write(str)
220
- end
221
-
222
- end #end of Parser Class