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.
- checksums.yaml +4 -4
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +51 -0
- data/Rakefile +10 -0
- data/bin/help/Help.rb +184 -0
- data/bin/help/Help_inst.rb +244 -0
- data/bin/linguide +23 -0
- data/bin/linmeric +36 -70
- data/doc/Archive.html +352 -0
- data/doc/Calculator/Evaluator.html +477 -0
- data/doc/Calculator/Lexer.html +186 -0
- data/doc/Calculator/Token.html +257 -0
- data/doc/Calculator.html +181 -0
- data/doc/Dim.html +257 -0
- data/doc/Filename.html +246 -0
- data/doc/Fixnum.html +253 -0
- data/doc/Float.html +253 -0
- data/doc/Function.html +784 -0
- data/doc/InputError.html +102 -0
- data/doc/Instructions_en.txt +6 -7
- data/doc/Instructions_it.txt +6 -9
- data/doc/Integrators.html +436 -0
- data/doc/LU.html +435 -0
- data/doc/Lexer.html +261 -0
- data/doc/Linmeric.html +109 -0
- data/doc/Listener.html +605 -0
- data/doc/Matrix.html +1719 -0
- data/doc/MyArgError.html +102 -0
- data/doc/NilClass.html +202 -0
- data/doc/Numeric.html +251 -0
- data/doc/Parser.html +389 -0
- data/doc/PrintError.html +622 -0
- data/doc/README_md.html +142 -0
- data/doc/Scp.html +530 -0
- data/doc/Sizer.html +652 -0
- data/doc/String.html +540 -0
- data/doc/Token.html +341 -0
- data/doc/Tool.html +394 -0
- data/doc/created.rid +18 -0
- data/doc/css/fonts.css +167 -0
- data/doc/css/rdoc.css +590 -0
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +190 -0
- data/doc/js/darkfish.js +161 -0
- data/doc/js/jquery.js +9404 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +109 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +228 -0
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +834 -0
- data/lib/linmeric/Archive.rb +22 -1
- data/lib/linmeric/Calculator.rb +252 -0
- data/lib/linmeric/CnGal_Matrix_class.rb +130 -49
- data/lib/linmeric/CnGal_new_classes.rb +139 -37
- data/lib/linmeric/CnGal_tools.rb +23 -40
- data/lib/linmeric/Error_print.rb +35 -1
- data/lib/linmeric/Function_class.rb +70 -11
- data/lib/linmeric/Integrators.rb +81 -35
- data/lib/linmeric/LU.rb +26 -5
- data/lib/linmeric/Lexer.rb +19 -1
- data/lib/linmeric/Listener.rb +25 -5
- data/lib/linmeric/Parser.rb +23 -1
- data/lib/linmeric/Scopify.rb +52 -31
- data/lib/linmeric/Sizer.rb +43 -10
- data/lib/linmeric/Token.rb +23 -4
- data/lib/linmeric/version.rb +3 -0
- data/lib/linmeric.rb +10 -8
- data/lib/linmeric_bin.rb +12 -0
- metadata +126 -22
- data/doc/Instructions_en.html +0 -231
- data/doc/Instructions_it.html +0 -231
- data/doc/README_en.html +0 -177
- data/doc/README_en.txt +0 -30
- data/doc/README_it.html +0 -187
- data/doc/README_it.txt +0 -32
data/doc/Scp.html
ADDED
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
|
|
7
|
+
<title>class Scp - 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-count">#count</a>
|
|
76
|
+
|
|
77
|
+
<li ><a href="#method-i-discard">#discard</a>
|
|
78
|
+
|
|
79
|
+
<li ><a href="#method-i-extract">#extract</a>
|
|
80
|
+
|
|
81
|
+
<li ><a href="#method-i-insert_b">#insert_b</a>
|
|
82
|
+
|
|
83
|
+
<li ><a href="#method-i-scopify">#scopify</a>
|
|
84
|
+
|
|
85
|
+
</ul>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
</div>
|
|
89
|
+
</nav>
|
|
90
|
+
|
|
91
|
+
<main role="main" aria-labelledby="class-Scp">
|
|
92
|
+
<h1 id="class-Scp" class="class">
|
|
93
|
+
class Scp
|
|
94
|
+
</h1>
|
|
95
|
+
|
|
96
|
+
<section class="description">
|
|
97
|
+
|
|
98
|
+
<p>This class manipulates a string representing an algebric expression
|
|
99
|
+
underlining the higher priority operations putting them between brackets.
|
|
100
|
+
<a href="Scp.html">Scp</a> prepares strings to be parsed. It must work
|
|
101
|
+
associated with <a href="Sizer.html">Sizer</a>. These rules are followed:</p>
|
|
102
|
+
<ul><li>
|
|
103
|
+
<p>… = … => (…) = (…) (same with `>`)</p>
|
|
104
|
+
</li><li>
|
|
105
|
+
<p>a + b * c => a + (b * c) (same with `/`)</p>
|
|
106
|
+
</li><li>
|
|
107
|
+
<p>a ^ b => (a ^ (b))</p>
|
|
108
|
+
</li><li>
|
|
109
|
+
<p><keyword>: <argument> => (<keyword>: <argument>)</p>
|
|
110
|
+
</li></ul>
|
|
111
|
+
<dl class="rdoc-list note-list"><dt>Author
|
|
112
|
+
<dd>
|
|
113
|
+
<p>Massimiliano Dal Mas (<a
|
|
114
|
+
href="mailto:max.codeware@gmail.com">max.codeware@gmail.com</a>)</p>
|
|
115
|
+
</dd><dt>License
|
|
116
|
+
<dd>
|
|
117
|
+
<p>Distributed under MIT license</p>
|
|
118
|
+
</dd></dl>
|
|
119
|
+
|
|
120
|
+
</section>
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
<section id="5Buntitled-5D" class="documentation-section">
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
|
|
136
|
+
<header>
|
|
137
|
+
<h3>Public Class Methods</h3>
|
|
138
|
+
</header>
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
<div id="method-c-new" class="method-detail ">
|
|
142
|
+
|
|
143
|
+
<div class="method-heading">
|
|
144
|
+
<span class="method-name">new</span><span
|
|
145
|
+
class="method-args">()</span>
|
|
146
|
+
|
|
147
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
148
|
+
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
<div class="method-description">
|
|
153
|
+
|
|
154
|
+
<p>Initializes a new counter</p>
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
<div class="method-source-code" id="new-source">
|
|
160
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 20</span>
|
|
161
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>
|
|
162
|
+
<span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
|
|
163
|
+
<span class="ruby-keyword">end</span></pre>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
</section>
|
|
175
|
+
|
|
176
|
+
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
|
|
177
|
+
<header>
|
|
178
|
+
<h3>Public Instance Methods</h3>
|
|
179
|
+
</header>
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
<div id="method-i-count" class="method-detail ">
|
|
183
|
+
|
|
184
|
+
<div class="method-heading">
|
|
185
|
+
<span class="method-name">count</span><span
|
|
186
|
+
class="method-args">()</span>
|
|
187
|
+
|
|
188
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
189
|
+
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
<div class="method-description">
|
|
194
|
+
|
|
195
|
+
<p>Returns the current value of the counter</p>
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
<div class="method-source-code" id="count-source">
|
|
201
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 154</span>
|
|
202
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">count</span>()
|
|
203
|
+
<span class="ruby-keyword">return</span> <span class="ruby-ivar">@i</span>
|
|
204
|
+
<span class="ruby-keyword">end</span></pre>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
<div id="method-i-insert_b" class="method-detail ">
|
|
216
|
+
|
|
217
|
+
<div class="method-heading">
|
|
218
|
+
<span class="method-name">insert_b</span><span
|
|
219
|
+
class="method-args">(expr)</span>
|
|
220
|
+
|
|
221
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
222
|
+
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
<div class="method-description">
|
|
227
|
+
|
|
228
|
+
<p>Inserts a couple of brackets `()` before non-binary sum and diff. operators</p>
|
|
229
|
+
<ul><li>
|
|
230
|
+
<p>*<strong>argument</strong>*: string to be checked and manipulated</p>
|
|
231
|
+
</li><li>
|
|
232
|
+
<p>*<strong>returns</strong>*: manipulated string</p>
|
|
233
|
+
</li></ul>
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
<div class="method-source-code" id="insert_b-source">
|
|
239
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 163</span>
|
|
240
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">insert_b</span>(<span class="ruby-identifier">expr</span>)
|
|
241
|
+
<span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
|
|
242
|
+
<span class="ruby-identifier">string</span> = <span class="ruby-keyword">false</span>
|
|
243
|
+
<span class="ruby-keyword">while</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>
|
|
244
|
+
<span class="ruby-identifier">string</span> = (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">"\""</span>) <span class="ruby-operator">?</span> (<span class="ruby-identifier">string</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-identifier">string</span>)
|
|
245
|
+
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'-'</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'+'</span>) <span class="ruby-keyword">and</span> ((<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'('</span>) <span class="ruby-keyword">or</span> (<span class="ruby-ivar">@i</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>)) <span class="ruby-keyword">and</span> <span class="ruby-operator">!</span><span class="ruby-identifier">string</span> <span class="ruby-keyword">then</span>
|
|
246
|
+
<span class="ruby-identifier">expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-ivar">@i</span>, <span class="ruby-string">'()'</span>
|
|
247
|
+
<span class="ruby-keyword">end</span>
|
|
248
|
+
<span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
249
|
+
<span class="ruby-keyword">end</span>
|
|
250
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">expr</span>
|
|
251
|
+
<span class="ruby-keyword">end</span></pre>
|
|
252
|
+
</div>
|
|
253
|
+
|
|
254
|
+
</div>
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
</div>
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
<div id="method-i-scopify" class="method-detail ">
|
|
263
|
+
|
|
264
|
+
<div class="method-heading">
|
|
265
|
+
<span class="method-name">scopify</span><span
|
|
266
|
+
class="method-args">(expr)</span>
|
|
267
|
+
|
|
268
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
269
|
+
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
<div class="method-description">
|
|
274
|
+
|
|
275
|
+
<p>Main function that analyzes the string and puts the brackets where it is
|
|
276
|
+
necessary.</p>
|
|
277
|
+
<ul><li>
|
|
278
|
+
<p>*<strong>argument</strong>*: string to be manipulated</p>
|
|
279
|
+
</li><li>
|
|
280
|
+
<p>*<strong>returns</strong>*: manipulated string</p>
|
|
281
|
+
</li></ul>
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
<div class="method-source-code" id="scopify-source">
|
|
287
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 29</span>
|
|
288
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">scopify</span>(<span class="ruby-identifier">expr</span>)
|
|
289
|
+
<span class="ruby-identifier">expr</span> = <span class="ruby-identifier">insert_b</span>(<span class="ruby-identifier">expr</span>)
|
|
290
|
+
<span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
|
|
291
|
+
<span class="ruby-identifier">n_expr</span> = <span class="ruby-string">""</span>
|
|
292
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-value">0</span>
|
|
293
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
|
|
294
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
295
|
+
<span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
|
|
296
|
+
<span class="ruby-identifier">eq</span> = <span class="ruby-keyword">false</span>
|
|
297
|
+
<span class="ruby-identifier">stack</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
|
298
|
+
<span class="ruby-identifier">last_e</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
|
299
|
+
<span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
|
|
300
|
+
<span class="ruby-keyword">while</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>
|
|
301
|
+
<span class="ruby-keyword">case</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
302
|
+
<span class="ruby-comment"># Each part between brackets is seen as a subexpression</span>
|
|
303
|
+
<span class="ruby-comment"># and it is analyzed recoursively.</span>
|
|
304
|
+
<span class="ruby-keyword">when</span> <span class="ruby-string">'('</span>
|
|
305
|
+
<span class="ruby-identifier">scp</span> = <span class="ruby-constant">Scp</span>.<span class="ruby-identifier">new</span>
|
|
306
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">scp</span>.<span class="ruby-identifier">scopify</span>(<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">expr</span>[(<span class="ruby-ivar">@i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">expr</span>.<span class="ruby-identifier">length</span>]))
|
|
307
|
+
<span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">scp</span>.<span class="ruby-identifier">count</span>
|
|
308
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\*\/]/</span>
|
|
309
|
+
<span class="ruby-comment"># If there are open brackets of higher opertions</span>
|
|
310
|
+
<span class="ruby-comment"># it closes them</span>
|
|
311
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
312
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span>
|
|
313
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span>
|
|
314
|
+
<span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
|
|
315
|
+
<span class="ruby-comment">#open_b -= 1</span>
|
|
316
|
+
<span class="ruby-keyword">end</span>
|
|
317
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
|
|
318
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span>
|
|
319
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
320
|
+
<span class="ruby-identifier">state</span> = (<span class="ruby-identifier">stack</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">pop</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
|
|
321
|
+
<span class="ruby-keyword">end</span>
|
|
322
|
+
<span class="ruby-comment"># If it is not still analyzing a multiplication, it adds the brackets </span>
|
|
323
|
+
<span class="ruby-comment"># following the rules</span>
|
|
324
|
+
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
|
|
325
|
+
<span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">'('</span>
|
|
326
|
+
<span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
|
|
327
|
+
<span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
328
|
+
<span class="ruby-keyword">end</span>
|
|
329
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
330
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span> <span class="ruby-comment"># + 1</span>
|
|
331
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\+\-]/</span>
|
|
332
|
+
<span class="ruby-comment"># higher priority operation brackets are closed</span>
|
|
333
|
+
<span class="ruby-comment"># last_empty is shifted</span>
|
|
334
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
335
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
336
|
+
<span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
|
|
337
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
|
|
338
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
339
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
340
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
|
|
341
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\^/</span>
|
|
342
|
+
<span class="ruby-comment"># It begins to put between brackets the operation and its exponent</span>
|
|
343
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-keyword">then</span>
|
|
344
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">")"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span>
|
|
345
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span>
|
|
346
|
+
<span class="ruby-comment">#open_b -= 1</span>
|
|
347
|
+
<span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
|
|
348
|
+
<span class="ruby-keyword">end</span>
|
|
349
|
+
<span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">'('</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
|
|
350
|
+
<span class="ruby-identifier">last_empty</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
|
|
351
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">+</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'('</span> <span class="ruby-operator">?</span> <span class="ruby-string">''</span> <span class="ruby-operator">:</span> <span class="ruby-string">'('</span>)
|
|
352
|
+
<span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">+=</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'('</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span><span class="ruby-operator">:</span><span class="ruby-value">2</span>))
|
|
353
|
+
<span class="ruby-identifier">stack</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">state</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
|
|
354
|
+
<span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
|
|
355
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\=/</span>
|
|
356
|
+
<span class="ruby-comment"># The expression at the left of `=` is put between brackets</span>
|
|
357
|
+
<span class="ruby-comment"># and a bracket at the right is opened</span>
|
|
358
|
+
<span class="ruby-comment"># It closes previously opened brackets</span>
|
|
359
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
360
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
361
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">></span><span class="ruby-value">0</span>
|
|
362
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
|
|
363
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
364
|
+
<span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
|
|
365
|
+
<span class="ruby-identifier">n_expr</span> = <span class="ruby-string">'('</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">')'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
366
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">'('</span>
|
|
367
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
|
|
368
|
+
<span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
|
|
369
|
+
<span class="ruby-identifier">eq</span> = <span class="ruby-keyword">true</span>
|
|
370
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\>/</span>
|
|
371
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
372
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
373
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
|
|
374
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
375
|
+
<span class="ruby-identifier">n_expr</span> = <span class="ruby-string">'('</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">')'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
376
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
|
|
377
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\:/</span>
|
|
378
|
+
<span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">'('</span>
|
|
379
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
380
|
+
<span class="ruby-identifier">last_k</span> = <span class="ruby-identifier">n_expr</span>[(<span class="ruby-identifier">last_empty</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>]
|
|
381
|
+
<span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-string">"mx:integ:as:from:"</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">last_k</span>
|
|
382
|
+
<span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> (<span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">"mx:"</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">"integ:"</span>)<span class="ruby-comment"># or last_k == "solve:")</span>
|
|
383
|
+
<span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">last_empty</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">"mx:"</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">"integ:"</span><span class="ruby-comment"># or last_k == "solve:"</span>
|
|
384
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
|
|
385
|
+
<span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">unless</span> <span class="ruby-string">"mx:integ:as:from:"</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">last_k</span>
|
|
386
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\"/</span>
|
|
387
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
388
|
+
<span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
389
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">discard</span>(<span class="ruby-identifier">expr</span>)
|
|
390
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">length</span>
|
|
391
|
+
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\~/</span>
|
|
392
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
393
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">open_b</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ) <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
394
|
+
<span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
|
|
395
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">1</span>
|
|
396
|
+
<span class="ruby-identifier">state</span> = (<span class="ruby-identifier">stack</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">pop</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
|
|
397
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
398
|
+
<span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
|
|
399
|
+
<span class="ruby-keyword">else</span>
|
|
400
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
401
|
+
<span class="ruby-keyword">end</span>
|
|
402
|
+
<span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
403
|
+
<span class="ruby-keyword">end</span>
|
|
404
|
+
<span class="ruby-comment"># it closes all the opened brackets</span>
|
|
405
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
406
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
407
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
408
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">')'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">eq</span>
|
|
409
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">n_expr</span>
|
|
410
|
+
<span class="ruby-keyword">end</span></pre>
|
|
411
|
+
</div>
|
|
412
|
+
|
|
413
|
+
</div>
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
</div>
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
</section>
|
|
422
|
+
|
|
423
|
+
<section id="private-instance-5Buntitled-5D-method-details" class="method-section">
|
|
424
|
+
<header>
|
|
425
|
+
<h3>Private Instance Methods</h3>
|
|
426
|
+
</header>
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
<div id="method-i-discard" class="method-detail ">
|
|
430
|
+
|
|
431
|
+
<div class="method-heading">
|
|
432
|
+
<span class="method-name">discard</span><span
|
|
433
|
+
class="method-args">(expr)</span>
|
|
434
|
+
|
|
435
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
436
|
+
|
|
437
|
+
</div>
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
<div class="method-description">
|
|
441
|
+
|
|
442
|
+
<p>Extracts the content between quotes</p>
|
|
443
|
+
<ul><li>
|
|
444
|
+
<p>*<strong>argument</strong>*: string to extract the content from</p>
|
|
445
|
+
</li><li>
|
|
446
|
+
<p>*<strong>returns</strong>*: content (substring)</p>
|
|
447
|
+
</li></ul>
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
<div class="method-source-code" id="discard-source">
|
|
453
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 199</span>
|
|
454
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">discard</span>(<span class="ruby-identifier">expr</span>)
|
|
455
|
+
<span class="ruby-identifier">extract</span> = <span class="ruby-string">""</span>
|
|
456
|
+
<span class="ruby-keyword">while</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">'"'</span> <span class="ruby-keyword">do</span>
|
|
457
|
+
<span class="ruby-identifier">extract</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
458
|
+
<span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
459
|
+
<span class="ruby-keyword">end</span>
|
|
460
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">extract</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
|
|
461
|
+
<span class="ruby-keyword">end</span></pre>
|
|
462
|
+
</div>
|
|
463
|
+
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
<div id="method-i-extract" class="method-detail ">
|
|
473
|
+
|
|
474
|
+
<div class="method-heading">
|
|
475
|
+
<span class="method-name">extract</span><span
|
|
476
|
+
class="method-args">(expr)</span>
|
|
477
|
+
|
|
478
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
479
|
+
|
|
480
|
+
</div>
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
<div class="method-description">
|
|
484
|
+
|
|
485
|
+
<p>Extracts the subexpression between brackets</p>
|
|
486
|
+
<ul><li>
|
|
487
|
+
<p>*<strong>argument</strong>*: string to extract the sub expression from</p>
|
|
488
|
+
</li><li>
|
|
489
|
+
<p>*<strong>returns</strong>*: subexpression (string)</p>
|
|
490
|
+
</li></ul>
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
<div class="method-source-code" id="extract-source">
|
|
496
|
+
<pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 182</span>
|
|
497
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">extract</span>(<span class="ruby-identifier">expr</span>)
|
|
498
|
+
<span class="ruby-identifier">n_expr</span> = <span class="ruby-string">""</span>
|
|
499
|
+
<span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
|
|
500
|
+
<span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
|
|
501
|
+
<span class="ruby-keyword">until</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>) <span class="ruby-keyword">or</span> ((<span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">')'</span>) <span class="ruby-keyword">and</span> (<span class="ruby-identifier">open_b</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>))
|
|
502
|
+
<span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>]
|
|
503
|
+
<span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'('</span>
|
|
504
|
+
<span class="ruby-identifier">open_b</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">')'</span> <span class="ruby-keyword">and</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
|
|
505
|
+
<span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
506
|
+
<span class="ruby-keyword">end</span>
|
|
507
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">')'</span>
|
|
508
|
+
<span class="ruby-keyword">end</span></pre>
|
|
509
|
+
</div>
|
|
510
|
+
|
|
511
|
+
</div>
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
</div>
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
</section>
|
|
520
|
+
|
|
521
|
+
</section>
|
|
522
|
+
</main>
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
<footer id="validator-badges" role="contentinfo">
|
|
526
|
+
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
|
527
|
+
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
|
|
528
|
+
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
|
529
|
+
</footer>
|
|
530
|
+
|