linmeric 0.1.0 → 0.2.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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +51 -0
  5. data/Rakefile +10 -0
  6. data/bin/help/Help.rb +184 -0
  7. data/bin/help/Help_inst.rb +244 -0
  8. data/bin/linguide +23 -0
  9. data/bin/linmeric +36 -70
  10. data/doc/Archive.html +352 -0
  11. data/doc/Calculator/Evaluator.html +477 -0
  12. data/doc/Calculator/Lexer.html +186 -0
  13. data/doc/Calculator/Token.html +257 -0
  14. data/doc/Calculator.html +181 -0
  15. data/doc/Dim.html +257 -0
  16. data/doc/Filename.html +246 -0
  17. data/doc/Fixnum.html +253 -0
  18. data/doc/Float.html +253 -0
  19. data/doc/Function.html +784 -0
  20. data/doc/InputError.html +102 -0
  21. data/doc/Instructions_en.txt +6 -7
  22. data/doc/Instructions_it.txt +6 -9
  23. data/doc/Integrators.html +436 -0
  24. data/doc/LU.html +435 -0
  25. data/doc/Lexer.html +261 -0
  26. data/doc/Linmeric.html +109 -0
  27. data/doc/Listener.html +605 -0
  28. data/doc/Matrix.html +1719 -0
  29. data/doc/MyArgError.html +102 -0
  30. data/doc/NilClass.html +202 -0
  31. data/doc/Numeric.html +251 -0
  32. data/doc/Parser.html +389 -0
  33. data/doc/PrintError.html +622 -0
  34. data/doc/README_md.html +142 -0
  35. data/doc/Scp.html +530 -0
  36. data/doc/Sizer.html +652 -0
  37. data/doc/String.html +540 -0
  38. data/doc/Token.html +341 -0
  39. data/doc/Tool.html +394 -0
  40. data/doc/created.rid +18 -0
  41. data/doc/css/fonts.css +167 -0
  42. data/doc/css/rdoc.css +590 -0
  43. data/doc/fonts/Lato-Light.ttf +0 -0
  44. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  45. data/doc/fonts/Lato-Regular.ttf +0 -0
  46. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  47. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  48. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  49. data/doc/images/add.png +0 -0
  50. data/doc/images/arrow_up.png +0 -0
  51. data/doc/images/brick.png +0 -0
  52. data/doc/images/brick_link.png +0 -0
  53. data/doc/images/bug.png +0 -0
  54. data/doc/images/bullet_black.png +0 -0
  55. data/doc/images/bullet_toggle_minus.png +0 -0
  56. data/doc/images/bullet_toggle_plus.png +0 -0
  57. data/doc/images/date.png +0 -0
  58. data/doc/images/delete.png +0 -0
  59. data/doc/images/find.png +0 -0
  60. data/doc/images/loadingAnimation.gif +0 -0
  61. data/doc/images/macFFBgHack.png +0 -0
  62. data/doc/images/package.png +0 -0
  63. data/doc/images/page_green.png +0 -0
  64. data/doc/images/page_white_text.png +0 -0
  65. data/doc/images/page_white_width.png +0 -0
  66. data/doc/images/plugin.png +0 -0
  67. data/doc/images/ruby.png +0 -0
  68. data/doc/images/tag_blue.png +0 -0
  69. data/doc/images/tag_green.png +0 -0
  70. data/doc/images/transparent.png +0 -0
  71. data/doc/images/wrench.png +0 -0
  72. data/doc/images/wrench_orange.png +0 -0
  73. data/doc/images/zoom.png +0 -0
  74. data/doc/index.html +190 -0
  75. data/doc/js/darkfish.js +161 -0
  76. data/doc/js/jquery.js +9404 -0
  77. data/doc/js/navigation.js +142 -0
  78. data/doc/js/navigation.js.gz +0 -0
  79. data/doc/js/search.js +109 -0
  80. data/doc/js/search_index.js +1 -0
  81. data/doc/js/search_index.js.gz +0 -0
  82. data/doc/js/searcher.js +228 -0
  83. data/doc/js/searcher.js.gz +0 -0
  84. data/doc/table_of_contents.html +834 -0
  85. data/lib/linmeric/Archive.rb +22 -1
  86. data/lib/linmeric/Calculator.rb +252 -0
  87. data/lib/linmeric/CnGal_Matrix_class.rb +130 -49
  88. data/lib/linmeric/CnGal_new_classes.rb +139 -37
  89. data/lib/linmeric/CnGal_tools.rb +23 -40
  90. data/lib/linmeric/Error_print.rb +35 -1
  91. data/lib/linmeric/Function_class.rb +70 -11
  92. data/lib/linmeric/Integrators.rb +81 -35
  93. data/lib/linmeric/LU.rb +26 -5
  94. data/lib/linmeric/Lexer.rb +19 -1
  95. data/lib/linmeric/Listener.rb +25 -5
  96. data/lib/linmeric/Parser.rb +23 -1
  97. data/lib/linmeric/Scopify.rb +52 -31
  98. data/lib/linmeric/Sizer.rb +43 -10
  99. data/lib/linmeric/Token.rb +23 -4
  100. data/lib/linmeric/version.rb +3 -0
  101. data/lib/linmeric.rb +10 -8
  102. data/lib/linmeric_bin.rb +12 -0
  103. metadata +126 -22
  104. data/doc/Instructions_en.html +0 -231
  105. data/doc/Instructions_it.html +0 -231
  106. data/doc/README_en.html +0 -177
  107. data/doc/README_en.txt +0 -30
  108. data/doc/README_it.html +0 -187
  109. data/doc/README_it.txt +0 -32
data/doc/Function.html ADDED
@@ -0,0 +1,784 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Function - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ </script>
12
+
13
+ <script src="./js/jquery.js"></script>
14
+ <script src="./js/darkfish.js"></script>
15
+
16
+ <link href="./css/fonts.css" rel="stylesheet">
17
+ <link href="./css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="class">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="./index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="./table_of_contents.html#pages">Pages</a>
31
+ <a href="./table_of_contents.html#classes">Classes</a>
32
+ <a href="./table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+
55
+ <div id="class-metadata">
56
+
57
+ <div id="parent-class-section" class="nav-section">
58
+ <h3>Parent</h3>
59
+
60
+
61
+ <p class="link">Object
62
+
63
+ </div>
64
+
65
+
66
+
67
+ <!-- Method Quickref -->
68
+ <div id="method-list-section" class="nav-section">
69
+ <h3>Methods</h3>
70
+
71
+ <ul class="link-list" role="directory">
72
+
73
+ <li ><a href="#method-c-new">::new</a>
74
+
75
+ <li ><a href="#method-i-balanced_brackets-3F">#balanced_brackets?</a>
76
+
77
+ <li ><a href="#method-i-convert">#convert</a>
78
+
79
+ <li ><a href="#method-i-integrate">#integrate</a>
80
+
81
+ <li ><a href="#method-i-ok-3F">#ok?</a>
82
+
83
+ <li ><a href="#method-i-to_block">#to_block</a>
84
+
85
+ <li ><a href="#method-i-to_s">#to_s</a>
86
+
87
+ <li ><a href="#method-i-tokenize">#tokenize</a>
88
+
89
+ <li ><a href="#method-i-translate">#translate</a>
90
+
91
+ <li ><a href="#method-i-vars">#vars</a>
92
+
93
+ </ul>
94
+ </div>
95
+
96
+ </div>
97
+ </nav>
98
+
99
+ <main role="main" aria-labelledby="class-Function">
100
+ <h1 id="class-Function" class="class">
101
+ class Function
102
+ </h1>
103
+
104
+ <section class="description">
105
+
106
+ <p>This class provides a simple representation of a function and some method
107
+ to manipulate it</p>
108
+ <dl class="rdoc-list note-list"><dt>Author
109
+ <dd>
110
+ <p>Massimiliano Dal Mas (<a
111
+ href="mailto:max.codeware@gmail.com">max.codeware@gmail.com</a>)</p>
112
+ </dd><dt>License
113
+ <dd>
114
+ <p>Distributed under MIT license</p>
115
+ </dd></dl>
116
+
117
+ </section>
118
+
119
+
120
+
121
+
122
+ <section id="5Buntitled-5D" class="documentation-section">
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
133
+ <header>
134
+ <h3>Public Class Methods</h3>
135
+ </header>
136
+
137
+
138
+ <div id="method-c-new" class="method-detail ">
139
+
140
+ <div class="method-heading">
141
+ <span class="method-name">new</span><span
142
+ class="method-args">(str)</span>
143
+
144
+ <span class="method-click-advice">click to toggle source</span>
145
+
146
+ </div>
147
+
148
+
149
+ <div class="method-description">
150
+
151
+ <p>Creates a new `Function` object</p>
152
+ <ul><li>
153
+ <p>*<strong>argument</strong>*: string to be converted (and representing a
154
+ function)</p>
155
+ </li></ul>
156
+
157
+
158
+
159
+
160
+ <div class="method-source-code" id="new-source">
161
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 17</span>
162
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">str</span>)
163
+ <span class="ruby-ivar">@inp</span> = <span class="ruby-identifier">str</span>
164
+ <span class="ruby-ivar">@vars</span> = []
165
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
166
+ <span class="ruby-ivar">@funct</span> = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">str</span>)
167
+ <span class="ruby-keyword">end</span></pre>
168
+ </div>
169
+
170
+ </div>
171
+
172
+
173
+
174
+
175
+ </div>
176
+
177
+
178
+ </section>
179
+
180
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
181
+ <header>
182
+ <h3>Public Instance Methods</h3>
183
+ </header>
184
+
185
+
186
+ <div id="method-i-integrate" class="method-detail ">
187
+
188
+ <div class="method-heading">
189
+ <span class="method-name">integrate</span><span
190
+ class="method-args">(r,n,m = 'simpson')</span>
191
+
192
+ <span class="method-click-advice">click to toggle source</span>
193
+
194
+ </div>
195
+
196
+
197
+ <div class="method-description">
198
+
199
+ <p>Integrates the function according to the specified method (see: <a
200
+ href="Integrators.html">Integrators</a>)</p>
201
+ <ul><li>
202
+ <p>*<strong>argument</strong>*: dimension of the range; see: <a
203
+ href="Dim.html">Dim</a></p>
204
+ </li><li>
205
+ <p>*<strong>argument</strong>*: number of points for integration</p>
206
+ </li><li>
207
+ <p>*<strong>argument</strong>*: method to integrate the function (optional).
208
+ &#39;simpson&#39; is default</p>
209
+ </li><li>
210
+ <p>*<strong>returns</strong>*:</p>
211
+ <ul><li>
212
+ <p><a href="Numeric.html">Numeric</a> value as result</p>
213
+ </li><li>
214
+ <p><code>nil</code> if an error occourred</p>
215
+ </li></ul>
216
+ </li></ul>
217
+
218
+
219
+
220
+
221
+ <div class="method-source-code" id="integrate-source">
222
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 85</span>
223
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">integrate</span>(<span class="ruby-identifier">r</span>,<span class="ruby-identifier">n</span>,<span class="ruby-identifier">m</span> = <span class="ruby-string">&#39;simpson&#39;</span>)
224
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ok?</span>
225
+ <span class="ruby-identifier">block</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">to_block</span>(<span class="ruby-value">1</span>)
226
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">block</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
227
+ <span class="ruby-identifier">m</span> = (<span class="ruby-identifier">m</span> <span class="ruby-operator">-</span> <span class="ruby-string">&#39;&quot;&#39;</span>).<span class="ruby-identifier">downcase</span>
228
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">m</span>
229
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;trapezes&quot;</span>
230
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.trapezi(r.sx,r.dx,n)#{block}&quot;</span>)
231
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;midpoint&quot;</span>
232
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.simpson(r.sx,r.dx,n)#{block}&quot;</span>)
233
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;simpson&quot;</span>
234
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.simpson(r.sx,r.dx,n)#{block}&quot;</span>)
235
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;rectl&quot;</span>
236
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.rettsx(r.sx,r.dx,n)#{block}&quot;</span>)
237
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;rectr&quot;</span>
238
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.rettdx(r.sx,r.dx,n)#{block}&quot;</span>)
239
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;boole&quot;</span>
240
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;Integrators.boole(r.sx,r.dx,n)#{block}&quot;</span>)
241
+ <span class="ruby-keyword">else</span>
242
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Argument Error: Invalid integration method&quot;</span>;
243
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
244
+ <span class="ruby-keyword">end</span>
245
+ <span class="ruby-keyword">end</span>
246
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Argument Error: bad function for integration&quot;</span>;
247
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
248
+ <span class="ruby-keyword">end</span></pre>
249
+ </div>
250
+
251
+ </div>
252
+
253
+
254
+
255
+
256
+ </div>
257
+
258
+
259
+ <div id="method-i-ok-3F" class="method-detail ">
260
+
261
+ <div class="method-heading">
262
+ <span class="method-name">ok?</span><span
263
+ class="method-args">()</span>
264
+
265
+ <span class="method-click-advice">click to toggle source</span>
266
+
267
+ </div>
268
+
269
+
270
+ <div class="method-description">
271
+
272
+ <p>Tells whether the function has been correctly converted from the string
273
+ format</p>
274
+ <ul><li>
275
+ <p>*<strong>returns</strong>*: <code>true</code> if the function has been
276
+ successfully converted; <code>false</code> else</p>
277
+ </li></ul>
278
+
279
+
280
+
281
+
282
+ <div class="method-source-code" id="ok-3F-source">
283
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 28</span>
284
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">ok?</span>
285
+ <span class="ruby-ivar">@funct</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>)
286
+ <span class="ruby-keyword">end</span></pre>
287
+ </div>
288
+
289
+ </div>
290
+
291
+
292
+
293
+
294
+ </div>
295
+
296
+
297
+ <div id="method-i-to_block" class="method-detail ">
298
+
299
+ <div class="method-heading">
300
+ <span class="method-name">to_block</span><span
301
+ class="method-args">(n = 0)</span>
302
+
303
+ <span class="method-click-advice">click to toggle source</span>
304
+
305
+ </div>
306
+
307
+
308
+ <div class="method-description">
309
+
310
+ <p>Returns the function as a ruby block ({ |…| … })</p>
311
+ <ul><li>
312
+ <p>*<strong>argument</strong>*: number of variables needed for the block;
313
+ default value is set if n == 0</p>
314
+ </li><li>
315
+ <p>*<strong>returns</strong>*: string that represents the block;
316
+ <code>nil</code> if an error is found</p>
317
+ </li></ul>
318
+
319
+
320
+
321
+
322
+ <div class="method-source-code" id="to_block-source">
323
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 35</span>
324
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_block</span>(<span class="ruby-identifier">n</span> = <span class="ruby-value">0</span>)
325
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ok?</span>
326
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span>
327
+ <span class="ruby-identifier">n</span> = <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
328
+ <span class="ruby-identifier">b_v</span> = <span class="ruby-node">&quot;|#{vars(n)}|&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
329
+ <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;{ #{b_v} #{@funct} }&quot;</span>
330
+ <span class="ruby-keyword">end</span></pre>
331
+ </div>
332
+
333
+ </div>
334
+
335
+
336
+
337
+
338
+ </div>
339
+
340
+
341
+ <div id="method-i-to_s" class="method-detail ">
342
+
343
+ <div class="method-heading">
344
+ <span class="method-name">to_s</span><span
345
+ class="method-args">()</span>
346
+
347
+ <span class="method-click-advice">click to toggle source</span>
348
+
349
+ </div>
350
+
351
+
352
+ <div class="method-description">
353
+
354
+ <ul><li>
355
+ <p>*<strong>returns</strong>*: string representation of the function</p>
356
+ </li></ul>
357
+
358
+
359
+
360
+
361
+ <div class="method-source-code" id="to_s-source">
362
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 73</span>
363
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
364
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@inp</span>
365
+ <span class="ruby-keyword">end</span></pre>
366
+ </div>
367
+
368
+ </div>
369
+
370
+
371
+
372
+
373
+ </div>
374
+
375
+
376
+ <div id="method-i-vars" class="method-detail ">
377
+
378
+ <div class="method-heading">
379
+ <span class="method-name">vars</span><span
380
+ class="method-args">(n = 0)</span>
381
+
382
+ <span class="method-click-advice">click to toggle source</span>
383
+
384
+ </div>
385
+
386
+
387
+ <div class="method-description">
388
+
389
+ <p>Builds the list of the variables needed for the block</p>
390
+ <ul><li>
391
+ <p>*<strong>argument</strong>*: number of variables needed for the block</p>
392
+ </li><li><dl class="rdoc-list note-list"><dt>*<strong>returns</strong>*
393
+ <dd></dd></dl>
394
+ <ul><li>
395
+ <p><code>nil</code> if an error occourred while converting the function</p>
396
+ </li><li>
397
+ <p><code>nil</code> if `n` is less than the number of variables of the
398
+ function</p>
399
+ </li><li>
400
+ <p>string representation of the list</p>
401
+ </li></ul>
402
+ </li></ul>
403
+
404
+
405
+
406
+
407
+ <div class="method-source-code" id="vars-source">
408
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 50</span>
409
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">vars</span>(<span class="ruby-identifier">n</span> = <span class="ruby-value">0</span>)
410
+ <span class="ruby-identifier">n</span> = <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
411
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ok?</span>
412
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span>
413
+ <span class="ruby-identifier">var</span> = (<span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-ivar">@vars</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-string">&quot;&quot;</span>
414
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">1</span><span class="ruby-operator">...</span><span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">length</span> <span class="ruby-keyword">do</span>
415
+ <span class="ruby-identifier">var</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;,&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@vars</span>[<span class="ruby-identifier">i</span>]
416
+ <span class="ruby-keyword">end</span>
417
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">then</span>
418
+ <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
419
+ (<span class="ruby-string">&#39;a&#39;</span><span class="ruby-operator">..</span><span class="ruby-string">&#39;z&#39;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ch</span><span class="ruby-operator">|</span>
420
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">ch</span>
421
+ <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span><span class="ruby-value">1</span>
422
+ <span class="ruby-identifier">var</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;,&#39;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">var</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
423
+ <span class="ruby-identifier">var</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">ch</span>
424
+ <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">n</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">size</span>)
425
+ <span class="ruby-keyword">end</span>
426
+ <span class="ruby-keyword">end</span>
427
+ <span class="ruby-keyword">end</span>
428
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">var</span>
429
+ <span class="ruby-keyword">end</span></pre>
430
+ </div>
431
+
432
+ </div>
433
+
434
+
435
+
436
+
437
+ </div>
438
+
439
+
440
+ </section>
441
+
442
+ <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
443
+ <header>
444
+ <h3>Private Instance Methods</h3>
445
+ </header>
446
+
447
+
448
+ <div id="method-i-balanced_brackets-3F" class="method-detail ">
449
+
450
+ <div class="method-heading">
451
+ <span class="method-name">balanced_brackets?</span><span
452
+ class="method-args">(expr)</span>
453
+
454
+ <span class="method-click-advice">click to toggle source</span>
455
+
456
+ </div>
457
+
458
+
459
+ <div class="method-description">
460
+
461
+ <p>Checks if the brackets are balanced in the input function</p>
462
+ <ul><li>
463
+ <p>*<strong>argument</strong>*: array of the function components</p>
464
+ </li><li>
465
+ <p>*<strong>returns</strong>*:</p>
466
+ <ul><li>
467
+ <p><code>nil</code> if `expr` is not an array</p>
468
+ </li><li>
469
+ <p><code>true</code> if the brackets are balanced; <code>false</code> else</p>
470
+ </li></ul>
471
+ </li></ul>
472
+
473
+
474
+
475
+
476
+ <div class="method-source-code" id="balanced_brackets-3F-source">
477
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 154</span>
478
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">balanced_brackets?</span>(<span class="ruby-identifier">expr</span>)
479
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>
480
+ <span class="ruby-identifier">brakets</span> = <span class="ruby-value">0</span>
481
+ <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">el</span><span class="ruby-operator">|</span>
482
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">el</span>
483
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&#39;(&#39;</span>
484
+ <span class="ruby-identifier">brakets</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
485
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&#39;)&#39;</span>
486
+ <span class="ruby-identifier">brakets</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
487
+ <span class="ruby-keyword">end</span>
488
+ <span class="ruby-keyword">end</span>
489
+ <span class="ruby-identifier">brakets</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>)
490
+ <span class="ruby-keyword">end</span></pre>
491
+ </div>
492
+
493
+ </div>
494
+
495
+
496
+
497
+
498
+ </div>
499
+
500
+
501
+ <div id="method-i-convert" class="method-detail ">
502
+
503
+ <div class="method-heading">
504
+ <span class="method-name">convert</span><span
505
+ class="method-args">(str)</span>
506
+
507
+ <span class="method-click-advice">click to toggle source</span>
508
+
509
+ </div>
510
+
511
+
512
+ <div class="method-description">
513
+
514
+ <p>Converts the function inerted by the user in a function written in Ruby
515
+ language</p>
516
+ <ul><li>
517
+ <p>*<strong>argument</strong>*: input function in string format (inserted by
518
+ the user)</p>
519
+ </li><li>
520
+ <p>*<strong>returns</strong>*: function understandable by Ruby in string
521
+ format</p>
522
+ </li></ul>
523
+
524
+
525
+
526
+
527
+ <div class="method-source-code" id="convert-source">
528
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 140</span>
529
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">str</span>)
530
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>
531
+ <span class="ruby-identifier">str</span> = <span class="ruby-identifier">tokenize</span>(<span class="ruby-identifier">str</span>)
532
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
533
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">balanced_brackets?</span> <span class="ruby-identifier">str</span>
534
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">translate</span>(<span class="ruby-identifier">str</span>)
535
+ <span class="ruby-keyword">end</span></pre>
536
+ </div>
537
+
538
+ </div>
539
+
540
+
541
+
542
+
543
+ </div>
544
+
545
+
546
+ <div id="method-i-tokenize" class="method-detail ">
547
+
548
+ <div class="method-heading">
549
+ <span class="method-name">tokenize</span><span
550
+ class="method-args">(str)</span>
551
+
552
+ <span class="method-click-advice">click to toggle source</span>
553
+
554
+ </div>
555
+
556
+
557
+ <div class="method-description">
558
+
559
+ <p>Splits the input string into its components (variables,operators…)</p>
560
+ <ul><li>
561
+ <p>*<strong>argument</strong>*: input function in string format (inserted by
562
+ the user)</p>
563
+ </li><li>
564
+ <p>*<strong>returns</strong>*: array containing the components of the function</p>
565
+ </li></ul>
566
+
567
+
568
+
569
+
570
+ <div class="method-source-code" id="tokenize-source">
571
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 118</span>
572
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">tokenize</span>(<span class="ruby-identifier">str</span>)
573
+ <span class="ruby-identifier">tokens</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
574
+ <span class="ruby-identifier">x</span> = <span class="ruby-string">&quot;&quot;</span>
575
+ <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_char</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ch</span><span class="ruby-operator">|</span>
576
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">ch</span>
577
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\+\-\*\/\^\(\)]/</span>
578
+ <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">ch</span>
579
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[a-zA-Z\0-9\.]/</span>
580
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-string">&#39;+-*/^()&#39;</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">tokens</span>[<span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
581
+ <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">push</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ch</span>)
582
+ <span class="ruby-identifier">x</span> = <span class="ruby-string">&quot;&quot;</span>
583
+ <span class="ruby-keyword">else</span>
584
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
585
+ <span class="ruby-keyword">end</span>
586
+ <span class="ruby-keyword">end</span>
587
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">tokens</span>
588
+ <span class="ruby-keyword">end</span></pre>
589
+ </div>
590
+
591
+ </div>
592
+
593
+
594
+
595
+
596
+ </div>
597
+
598
+
599
+ <div id="method-i-translate" class="method-detail ">
600
+
601
+ <div class="method-heading">
602
+ <span class="method-name">translate</span><span
603
+ class="method-args">(str,open_b = false)</span>
604
+
605
+ <span class="method-click-advice">click to toggle source</span>
606
+
607
+ </div>
608
+
609
+
610
+ <div class="method-description">
611
+
612
+ <p>Translates the function from linmeric language to Ruby language using a
613
+ turing machine to detect possible errors</p>
614
+ <ul><li>
615
+ <p>*<strong>argument</strong>*: array of the function components</p>
616
+ </li><li>
617
+ <p>*<strong>argument</strong>*: boolean to identify whether we are inside
618
+ brackets or not. <code>false</code> default</p>
619
+ </li></ul>
620
+
621
+ <p>(out brackets)</p>
622
+ <ul><li>
623
+ <p>*<strong>returns</strong>*:</p>
624
+ <ul><li>
625
+ <p><code>nil</code> if `str` is not an array</p>
626
+ </li><li>
627
+ <p>function in Ruby language in string format</p>
628
+ </li></ul>
629
+ </li></ul>
630
+
631
+
632
+
633
+
634
+ <div class="method-source-code" id="translate-source">
635
+ <pre><span class="ruby-comment"># File lib/linmeric/Function_class.rb, line 177</span>
636
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">translate</span>(<span class="ruby-identifier">str</span>,<span class="ruby-identifier">open_b</span> = <span class="ruby-keyword">false</span>)
637
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>
638
+ <span class="ruby-identifier">funct</span> = <span class="ruby-string">&quot;&quot;</span>
639
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
640
+ <span class="ruby-keyword">while</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">size</span>
641
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">state</span>
642
+
643
+ <span class="ruby-comment"># beginning state</span>
644
+ <span class="ruby-keyword">when</span> <span class="ruby-value">0</span>
645
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>]
646
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\+\-]/</span>
647
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>]
648
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
649
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\p{Alpha}/</span>
650
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">Tool</span>.<span class="ruby-identifier">f</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-keyword">then</span>
651
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;Math::#{str[@i]}&quot;</span>
652
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">4</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;PI&quot;</span>
653
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;PI&quot;</span>
654
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
655
+ <span class="ruby-identifier">ch</span> = <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">downcase</span>
656
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">ch</span>
657
+ <span class="ruby-ivar">@vars</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ch</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">ch</span>
658
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
659
+ <span class="ruby-keyword">else</span>
660
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
661
+ <span class="ruby-keyword">end</span>
662
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[0-9]+/</span>
663
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">integer?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">float?</span> <span class="ruby-keyword">then</span>
664
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>]
665
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
666
+ <span class="ruby-keyword">else</span>
667
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
668
+ <span class="ruby-keyword">end</span>
669
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;(&quot;</span>
670
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;(&quot;</span>
671
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
672
+ <span class="ruby-identifier">part</span> = <span class="ruby-identifier">translate</span>(<span class="ruby-identifier">str</span>,<span class="ruby-keyword">true</span>)
673
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
674
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">part</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">then</span>
675
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">part</span>
676
+ <span class="ruby-keyword">else</span>
677
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
678
+ <span class="ruby-keyword">end</span>
679
+ <span class="ruby-keyword">else</span>
680
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
681
+ <span class="ruby-keyword">end</span>
682
+
683
+ <span class="ruby-comment"># state 1 expects or a variable (single char) or a number or a function or (</span>
684
+ <span class="ruby-keyword">when</span> <span class="ruby-value">1</span>
685
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>]
686
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\p{Alpha}/</span>
687
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">Tool</span>.<span class="ruby-identifier">f</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-keyword">then</span>
688
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;Math::#{str[@i]}&quot;</span>
689
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">4</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;PI&quot;</span>
690
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;PI&quot;</span>
691
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
692
+ <span class="ruby-identifier">ch</span> = <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">downcase</span>
693
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">ch</span>
694
+ <span class="ruby-ivar">@vars</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ch</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@vars</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">ch</span>
695
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
696
+ <span class="ruby-keyword">else</span>
697
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
698
+ <span class="ruby-keyword">end</span>
699
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[0-9]+/</span>
700
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">integer?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>].<span class="ruby-identifier">float?</span> <span class="ruby-keyword">then</span>
701
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>]
702
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
703
+ <span class="ruby-keyword">else</span>
704
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
705
+ <span class="ruby-keyword">end</span>
706
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;(&quot;</span>
707
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;(&quot;</span>
708
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">3</span>
709
+ <span class="ruby-keyword">else</span>
710
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
711
+
712
+ <span class="ruby-keyword">end</span>
713
+
714
+ <span class="ruby-comment"># state 2 expects an operator or )</span>
715
+ <span class="ruby-keyword">when</span> <span class="ruby-value">2</span>
716
+ <span class="ruby-keyword">if</span> <span class="ruby-regexp">/[\+\-\*\/\^]{1}/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-keyword">then</span>
717
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;^&quot;</span>
718
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;**&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;^&quot;</span>
719
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
720
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;)&quot;</span>
721
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">then</span>
722
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">funct</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;)&quot;</span>
723
+ <span class="ruby-keyword">else</span>
724
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
725
+ <span class="ruby-keyword">end</span>
726
+ <span class="ruby-keyword">else</span>
727
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
728
+ <span class="ruby-keyword">end</span>
729
+
730
+ <span class="ruby-comment"># state 3 expects a sub_expression not beginnin with (</span>
731
+ <span class="ruby-keyword">when</span> <span class="ruby-value">3</span>
732
+ <span class="ruby-identifier">part</span> = <span class="ruby-identifier">translate</span>(<span class="ruby-identifier">str</span>,<span class="ruby-keyword">true</span>)
733
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
734
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">part</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">then</span>
735
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">part</span>
736
+ <span class="ruby-keyword">else</span>
737
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
738
+ <span class="ruby-keyword">end</span>
739
+
740
+ <span class="ruby-comment"># state 4 expects a sub_expression beginning with (</span>
741
+ <span class="ruby-keyword">when</span> <span class="ruby-value">4</span>
742
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-keyword">then</span>
743
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
744
+ <span class="ruby-identifier">part</span> = <span class="ruby-identifier">translate</span>(<span class="ruby-identifier">str</span>,<span class="ruby-keyword">true</span>)
745
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
746
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">part</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">then</span>
747
+ <span class="ruby-identifier">funct</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">part</span>
748
+ <span class="ruby-keyword">else</span>
749
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
750
+ <span class="ruby-keyword">end</span>
751
+ <span class="ruby-keyword">else</span>
752
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
753
+ <span class="ruby-keyword">end</span>
754
+
755
+ <span class="ruby-keyword">else</span>
756
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
757
+ <span class="ruby-keyword">end</span>
758
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
759
+ <span class="ruby-keyword">end</span>
760
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
761
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">funct</span>
762
+ <span class="ruby-keyword">end</span></pre>
763
+ </div>
764
+
765
+ </div>
766
+
767
+
768
+
769
+
770
+ </div>
771
+
772
+
773
+ </section>
774
+
775
+ </section>
776
+ </main>
777
+
778
+
779
+ <footer id="validator-badges" role="contentinfo">
780
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
781
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
782
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
783
+ </footer>
784
+