surpass 0.0.4 → 0.0.6
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.
- data/History.txt +4 -0
- data/README.txt +3 -20
- data/Rakefile +2 -13
- data/bin/surpass +8 -0
- data/examples/big-16mb.rb +25 -0
- data/examples/big-random-strings.rb +28 -0
- data/examples/blanks.rb +34 -0
- data/examples/blanks.xls +0 -0
- data/examples/col_width.rb +16 -0
- data/examples/col_width.xls +0 -0
- data/examples/dates.rb +31 -0
- data/examples/dates.xls +0 -0
- data/examples/format.rb +23 -0
- data/examples/format.xls +0 -0
- data/examples/hello-world.rb +9 -0
- data/examples/hello-world.xls +0 -0
- data/examples/image.rb +10 -0
- data/examples/image.xls +0 -0
- data/examples/merged.rb +36 -0
- data/examples/merged.xls +0 -0
- data/examples/merged0.rb +27 -0
- data/examples/merged0.xls +0 -0
- data/examples/merged1.rb +99 -0
- data/examples/merged1.xls +0 -0
- data/examples/num_formats.rb +55 -0
- data/examples/num_formats.xls +0 -0
- data/examples/numbers.rb +24 -0
- data/examples/numbers.xls +0 -0
- data/examples/outline.rb +110 -0
- data/examples/outline.xls +0 -0
- data/examples/panes.rb +48 -0
- data/examples/panes.xls +0 -0
- data/examples/protection.rb +132 -0
- data/examples/protection.xls +0 -0
- data/examples/python.bmp +0 -0
- data/examples/row_styles.rb +16 -0
- data/examples/row_styles.xls +0 -0
- data/examples/row_styles_empty.rb +15 -0
- data/examples/row_styles_empty.xls +0 -0
- data/examples/set_cell_and_range_style.rb +12 -0
- data/examples/set_cell_and_range_style.xls +0 -0
- data/examples/wrapped-text.rb +13 -0
- data/examples/wrapped-text.xls +0 -0
- data/examples/write_arrays.rb +22 -0
- data/examples/write_arrays.xls +0 -0
- data/examples/ws_props.rb +80 -0
- data/lib/surpass/ExcelFormula.g +366 -0
- data/lib/surpass/ExcelFormula.tokens +30 -0
- data/lib/surpass/ExcelFormulaLexer.rb +922 -0
- data/lib/surpass/ExcelFormulaParser.rb +602 -0
- data/lib/{biff_record.rb → surpass/biff_record.rb} +0 -0
- data/lib/{bitmap.rb → surpass/bitmap.rb} +0 -0
- data/lib/{cell.rb → surpass/cell.rb} +2 -34
- data/lib/{chart.rb → surpass/chart.rb} +0 -0
- data/lib/{column.rb → surpass/column.rb} +0 -0
- data/lib/{document.rb → surpass/document.rb} +0 -0
- data/lib/surpass/excel_formula.rb +23 -0
- data/lib/{excel_magic.rb → surpass/excel_magic.rb} +0 -0
- data/lib/{formatting.rb → surpass/formatting.rb} +93 -53
- data/lib/{row.rb → surpass/row.rb} +0 -0
- data/lib/{style.rb → surpass/style.rb} +2 -1
- data/lib/surpass/tokens.txt +2 -0
- data/lib/{utilities.rb → surpass/utilities.rb} +0 -0
- data/lib/{workbook.rb → surpass/workbook.rb} +0 -0
- data/lib/{worksheet.rb → surpass/worksheet.rb} +15 -6
- data/lib/surpass.rb +1 -1
- data/spec/biff_record_spec.rb +268 -0
- data/spec/cell_spec.rb +56 -0
- data/spec/data/random-strings.txt +10000 -0
- data/spec/document_spec.rb +168 -0
- data/spec/excel_formula_spec.rb +27 -0
- data/spec/formatting_spec.rb +53 -0
- data/spec/output/cells-rk.xls +0 -0
- data/spec/output/cells.xls +0 -0
- data/spec/output/mini.xls +0 -0
- data/spec/reference/P-0508-0000507647-3280-5298.xls +0 -0
- data/spec/reference/all-cell-styles.bin +0 -0
- data/spec/reference/all-number-formats.bin +0 -0
- data/spec/reference/all-styles.bin +0 -0
- data/spec/reference/mini.xls +0 -0
- data/spec/row_spec.rb +19 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/style_spec.rb +89 -0
- data/spec/surpass_spec.rb +7 -0
- data/spec/utilities_spec.rb +57 -0
- data/spec/workbook_spec.rb +48 -0
- data/spec/worksheet_spec.rb +0 -0
- data/stats/cloc.txt +8 -0
- data/stats/rcov.txt +0 -0
- data/stats/specdoc.txt +158 -0
- data/surpass.gemspec +40 -0
- data/tasks/setup.rb +1 -1
- data/tasks/zentest.rake +36 -0
- data/webby/README.txt +6 -0
- data/webby/Sitefile +43 -0
- data/webby/content/css/pygments.txt +6 -0
- data/webby/content/css/style.css +279 -0
- data/webby/content/examples/autoformat.png +0 -0
- data/webby/content/examples/autoformat.rb +32 -0
- data/webby/content/examples/autoformat.xls +0 -0
- data/webby/content/examples/borders.png +0 -0
- data/webby/content/examples/borders.rb +15 -0
- data/webby/content/examples/borders.xls +0 -0
- data/webby/content/examples/colours.png +0 -0
- data/webby/content/examples/colours.rb +23 -0
- data/webby/content/examples/colours.xls +0 -0
- data/webby/content/examples/data.png +0 -0
- data/webby/content/examples/data.rb +11 -0
- data/webby/content/examples/data.xls +0 -0
- data/webby/content/examples/formatting.png +0 -0
- data/webby/content/examples/formatting.rb +78 -0
- data/webby/content/examples/formatting.xls +0 -0
- data/webby/content/examples/hello-world.png +0 -0
- data/webby/content/examples/hello-world.py +8 -0
- data/webby/content/examples/hello-world.rb +9 -0
- data/webby/content/examples/hello-world.xls +0 -0
- data/webby/content/examples/number-format-string.png +0 -0
- data/webby/content/examples/number-format-string.rb +14 -0
- data/webby/content/examples/number-format-string.xls +0 -0
- data/webby/content/examples/patterns.png +0 -0
- data/webby/content/examples/patterns.rb +26 -0
- data/webby/content/examples/patterns.xls +0 -0
- data/webby/content/examples/show-greens.sh +1 -0
- data/webby/content/examples/surpass-info.sh +1 -0
- data/webby/content/img/Thumbs.db +0 -0
- data/webby/content/img/bg_menu.gif +0 -0
- data/webby/content/img/bg_t.gif +0 -0
- data/webby/content/img/bullet.gif +0 -0
- data/webby/content/img/logo.png +0 -0
- data/webby/content/img/logo_.jpg +0 -0
- data/webby/content/img/top_bg.gif +0 -0
- data/webby/content/img/top_bg_.gif +0 -0
- data/webby/content/index.txt +16 -0
- data/webby/content/installation/index.txt +24 -0
- data/webby/content/source/ExcelFormulaLexer.txt +7 -0
- data/webby/content/source/ExcelFormulaParser.txt +7 -0
- data/webby/content/source/biff_record.txt +7 -0
- data/webby/content/source/bitmap.txt +7 -0
- data/webby/content/source/cell.txt +7 -0
- data/webby/content/source/chart.txt +7 -0
- data/webby/content/source/column.txt +7 -0
- data/webby/content/source/document.txt +7 -0
- data/webby/content/source/excel_formula.txt +7 -0
- data/webby/content/source/excel_magic.txt +7 -0
- data/webby/content/source/formatting.txt +7 -0
- data/webby/content/source/row.txt +7 -0
- data/webby/content/source/style.txt +7 -0
- data/webby/content/source/utilities.txt +7 -0
- data/webby/content/source/workbook.txt +7 -0
- data/webby/content/source/worksheet.txt +7 -0
- data/webby/content/surpass-manual.erb +198 -0
- data/webby/layouts/book.txt +29 -0
- data/webby/layouts/default.txt +27 -0
- data/webby/layouts/two_column.txt +25 -0
- data/webby/layouts/web.txt +66 -0
- data/webby/output/.cairn +0 -0
- data/webby/output/css/blueprint/ie.css +26 -0
- data/webby/output/css/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/webby/output/css/blueprint/plugins/buttons/icons/key.png +0 -0
- data/webby/output/css/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/webby/output/css/blueprint/plugins/buttons/readme.txt +32 -0
- data/webby/output/css/blueprint/plugins/buttons/screen.css +97 -0
- data/webby/output/css/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/webby/output/css/blueprint/plugins/fancy-type/screen.css +71 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/webby/output/css/blueprint/plugins/link-icons/readme.txt +18 -0
- data/webby/output/css/blueprint/plugins/link-icons/screen.css +40 -0
- data/webby/output/css/blueprint/plugins/rtl/readme.txt +10 -0
- data/webby/output/css/blueprint/plugins/rtl/screen.css +109 -0
- data/webby/output/css/blueprint/print.css +30 -0
- data/webby/output/css/blueprint/screen.css +251 -0
- data/webby/output/css/blueprint/src/forms.css +49 -0
- data/webby/output/css/blueprint/src/grid.css +212 -0
- data/webby/output/css/blueprint/src/grid.png +0 -0
- data/webby/output/css/blueprint/src/ie.css +59 -0
- data/webby/output/css/blueprint/src/print.css +85 -0
- data/webby/output/css/blueprint/src/reset.css +38 -0
- data/webby/output/css/blueprint/src/typography.css +105 -0
- data/webby/output/css/pygments.css +59 -0
- data/webby/output/css/site.css +62 -0
- data/webby/output/css/style.css +279 -0
- data/webby/output/examples/autoformat.png +0 -0
- data/webby/output/examples/autoformat.rb +32 -0
- data/webby/output/examples/autoformat.xls +0 -0
- data/webby/output/examples/borders.png +0 -0
- data/webby/output/examples/borders.rb +15 -0
- data/webby/output/examples/borders.xls +0 -0
- data/webby/output/examples/colours.png +0 -0
- data/webby/output/examples/colours.rb +23 -0
- data/webby/output/examples/colours.xls +0 -0
- data/webby/output/examples/data.png +0 -0
- data/webby/output/examples/data.rb +11 -0
- data/webby/output/examples/data.xls +0 -0
- data/webby/output/examples/formatting.png +0 -0
- data/webby/output/examples/formatting.rb +78 -0
- data/webby/output/examples/formatting.xls +0 -0
- data/webby/output/examples/hello-world.png +0 -0
- data/webby/output/examples/hello-world.py +8 -0
- data/webby/output/examples/hello-world.rb +9 -0
- data/webby/output/examples/hello-world.xls +0 -0
- data/webby/output/examples/number-format-string.png +0 -0
- data/webby/output/examples/number-format-string.rb +14 -0
- data/webby/output/examples/number-format-string.xls +0 -0
- data/webby/output/examples/patterns.png +0 -0
- data/webby/output/examples/patterns.rb +26 -0
- data/webby/output/examples/patterns.xls +0 -0
- data/webby/output/examples/show-greens.sh +1 -0
- data/webby/output/examples/surpass-info.sh +1 -0
- data/webby/output/img/Thumbs.db +0 -0
- data/webby/output/img/bg_menu.gif +0 -0
- data/webby/output/img/bg_t.gif +0 -0
- data/webby/output/img/bullet.gif +0 -0
- data/webby/output/img/logo.png +0 -0
- data/webby/output/img/logo_.jpg +0 -0
- data/webby/output/img/top_bg.gif +0 -0
- data/webby/output/img/top_bg_.gif +0 -0
- data/webby/output/index.html +138 -0
- data/webby/output/installation/index.html +64 -0
- data/webby/output/installation/installation.html +1 -0
- data/webby/output/installation.html +1 -0
- data/webby/output/source/ExcelFormulaLexer.html +981 -0
- data/webby/output/source/ExcelFormulaParser.html +661 -0
- data/webby/output/source/biff_record.html +462 -0
- data/webby/output/source/bitmap.html +277 -0
- data/webby/output/source/cell.html +241 -0
- data/webby/output/source/chart.html +64 -0
- data/webby/output/source/column.html +99 -0
- data/webby/output/source/document.html +465 -0
- data/webby/output/source/excel_formula.html +82 -0
- data/webby/output/source/excel_magic.html +1072 -0
- data/webby/output/source/formatting.html +664 -0
- data/webby/output/source/row.html +169 -0
- data/webby/output/source/style.html +158 -0
- data/webby/output/source/surpass.html +110 -0
- data/webby/output/source/utilities.html +145 -0
- data/webby/output/source/workbook.html +265 -0
- data/webby/output/source/worksheet.html +331 -0
- data/webby/output/surpass-manual-0-0-5.pdf +0 -0
- data/webby/output/surpass-manual.aux +50 -0
- data/webby/output/surpass-manual.log +366 -0
- data/webby/output/surpass-manual.out +20 -0
- data/webby/output/surpass-manual.tex +582 -0
- data/webby/output/surpass-manual.toc +20 -0
- data/webby/rsync-exclude +7 -0
- data/webby/tasks/latex.rake +14 -0
- data/webby/tasks/screenshots.rb +58 -0
- data/webby/templates/article.erb +15 -0
- data/webby/templates/book.erb +16 -0
- data/webby/templates/page.erb +9 -0
- metadata +302 -24
- data/bin/surpass-info +0 -20
- data/lib/excel_formula.rb +0 -6
@@ -0,0 +1,661 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
+
|
3
|
+
<!-- ========================================================== -->
|
4
|
+
<!-- Created by Devit Schizoper -->
|
5
|
+
<!-- Created HomePages http://LoadFoo.starzonewebhost.com -->
|
6
|
+
<!-- Created Day 01.12.2006 -->
|
7
|
+
<!-- ========================================================== -->
|
8
|
+
|
9
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
10
|
+
<head>
|
11
|
+
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
|
12
|
+
<meta name="author" content="LoadFoO" />
|
13
|
+
<meta name="description" content="Site description" />
|
14
|
+
<meta name="keywords" content="key, words" />
|
15
|
+
<title>Surpass :: ExcelFormulaParser.rb</title>
|
16
|
+
<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
|
17
|
+
<link rel="stylesheet" href="/css/pygments.css" type="text/css" />
|
18
|
+
<link rel="shortcut icon" href="favicon.ico" />
|
19
|
+
</head>
|
20
|
+
|
21
|
+
<body>
|
22
|
+
<div id="wrap">
|
23
|
+
<div id="top">
|
24
|
+
<h2><a href="/" title="Back to main page">Surpass</a></h2>
|
25
|
+
<div id="menu">
|
26
|
+
<ul>
|
27
|
+
<li><a href="/installation">Installation</a></li>
|
28
|
+
<li><a href="/examples">Examples</a></li>
|
29
|
+
<li><a href="/source">Source</a></li>
|
30
|
+
</ul>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<div id="content">
|
34
|
+
<div id="left">
|
35
|
+
<h2>ExcelFormulaParser.rb</h2>
|
36
|
+
<div class="highlight"><pre><span class="c1"># ExcelFormulaParser (ExcelFormula.g)</span>
|
37
|
+
<span class="c1"># Generated by ANTLR 3.1.2-2008-10-21 on 2009-06-15 23:03:59</span>
|
38
|
+
|
39
|
+
<span class="nb">require</span> <span class="s1">'ExcelFormulaLexer'</span> <span class="k">unless</span> <span class="n">defined?</span><span class="p">(</span><span class="no">ExcelFormulaLexer</span><span class="p">)</span>
|
40
|
+
|
41
|
+
<span class="k">class</span> <span class="nc">ExcelFormulaParser</span>
|
42
|
+
<span class="kp">attr_reader</span> <span class="ss">:lexer</span>
|
43
|
+
|
44
|
+
<span class="no">TOKENS</span> <span class="o">=</span> <span class="o">[</span>
|
45
|
+
<span class="o">[</span><span class="s2">"EQ"</span><span class="p">,</span> <span class="mi">1</span><span class="o">]</span><span class="p">,</span>
|
46
|
+
<span class="o">[</span><span class="s2">"CONCAT"</span><span class="p">,</span> <span class="mi">2</span><span class="o">]</span><span class="p">,</span>
|
47
|
+
<span class="o">[</span><span class="s2">"ADD"</span><span class="p">,</span> <span class="mi">3</span><span class="o">]</span><span class="p">,</span>
|
48
|
+
<span class="o">[</span><span class="s2">"SUB"</span><span class="p">,</span> <span class="mi">4</span><span class="o">]</span><span class="p">,</span>
|
49
|
+
<span class="o">[</span><span class="s2">"MUL"</span><span class="p">,</span> <span class="mi">5</span><span class="o">]</span><span class="p">,</span>
|
50
|
+
<span class="o">[</span><span class="s2">"DIV"</span><span class="p">,</span> <span class="mi">6</span><span class="o">]</span><span class="p">,</span>
|
51
|
+
<span class="o">[</span><span class="s2">"POWER"</span><span class="p">,</span> <span class="mi">7</span><span class="o">]</span><span class="p">,</span>
|
52
|
+
<span class="o">[</span><span class="s2">"PERCENT"</span><span class="p">,</span> <span class="mi">8</span><span class="o">]</span><span class="p">,</span>
|
53
|
+
<span class="o">[</span><span class="s2">"TRUE_CONST"</span><span class="p">,</span> <span class="mi">9</span><span class="o">]</span><span class="p">,</span>
|
54
|
+
<span class="o">[</span><span class="s2">"FALSE_CONST"</span><span class="p">,</span> <span class="mi">10</span><span class="o">]</span><span class="p">,</span>
|
55
|
+
<span class="o">[</span><span class="s2">"STR_CONST"</span><span class="p">,</span> <span class="mi">11</span><span class="o">]</span><span class="p">,</span>
|
56
|
+
<span class="o">[</span><span class="s2">"INT_CONST"</span><span class="p">,</span> <span class="mi">12</span><span class="o">]</span><span class="p">,</span>
|
57
|
+
<span class="o">[</span><span class="s2">"NUM_CONST"</span><span class="p">,</span> <span class="mi">13</span><span class="o">]</span><span class="p">,</span>
|
58
|
+
<span class="o">[</span><span class="s2">"REF2D"</span><span class="p">,</span> <span class="mi">14</span><span class="o">]</span><span class="p">,</span>
|
59
|
+
<span class="o">[</span><span class="s2">"COLON"</span><span class="p">,</span> <span class="mi">15</span><span class="o">]</span><span class="p">,</span>
|
60
|
+
<span class="o">[</span><span class="s2">"LT"</span><span class="p">,</span> <span class="mi">16</span><span class="o">]</span><span class="p">,</span>
|
61
|
+
<span class="o">[</span><span class="s2">"GT"</span><span class="p">,</span> <span class="mi">17</span><span class="o">]</span><span class="p">,</span>
|
62
|
+
<span class="o">[</span><span class="s2">"NE"</span><span class="p">,</span> <span class="mi">18</span><span class="o">]</span><span class="p">,</span>
|
63
|
+
<span class="o">[</span><span class="s2">"LE"</span><span class="p">,</span> <span class="mi">19</span><span class="o">]</span><span class="p">,</span>
|
64
|
+
<span class="o">[</span><span class="s2">"GE"</span><span class="p">,</span> <span class="mi">20</span><span class="o">]</span><span class="p">,</span>
|
65
|
+
<span class="o">[</span><span class="s2">"SEMICOLON"</span><span class="p">,</span> <span class="mi">21</span><span class="o">]</span><span class="p">,</span>
|
66
|
+
<span class="o">[</span><span class="s2">"COMMA"</span><span class="p">,</span> <span class="mi">22</span><span class="o">]</span><span class="p">,</span>
|
67
|
+
<span class="o">[</span><span class="s2">"LP"</span><span class="p">,</span> <span class="mi">23</span><span class="o">]</span><span class="p">,</span>
|
68
|
+
<span class="o">[</span><span class="s2">"RP"</span><span class="p">,</span> <span class="mi">24</span><span class="o">]</span><span class="p">,</span>
|
69
|
+
<span class="o">[</span><span class="s2">"BANG"</span><span class="p">,</span> <span class="mi">25</span><span class="o">]</span><span class="p">,</span>
|
70
|
+
<span class="o">[</span><span class="s2">"DIGIT"</span><span class="p">,</span> <span class="mi">26</span><span class="o">]</span><span class="p">,</span>
|
71
|
+
<span class="o">[</span><span class="s2">"NAME"</span><span class="p">,</span> <span class="mi">27</span><span class="o">]</span><span class="p">,</span>
|
72
|
+
<span class="o">[</span><span class="s2">"QUOTENAME"</span><span class="p">,</span> <span class="mi">28</span><span class="o">]</span><span class="p">,</span>
|
73
|
+
<span class="o">[</span><span class="s2">"FUNC_IF"</span><span class="p">,</span> <span class="mi">29</span><span class="o">]</span><span class="p">,</span>
|
74
|
+
<span class="o">[</span><span class="s2">"FUNC_CHOOSE"</span><span class="p">,</span> <span class="mi">30</span><span class="o">]</span>
|
75
|
+
<span class="o">].</span><span class="n">inject</span><span class="p">({})</span> <span class="p">{</span> <span class="o">|</span><span class="nb">hash</span><span class="p">,</span> <span class="n">pair</span><span class="o">|</span>
|
76
|
+
<span class="nb">name</span> <span class="o">=</span> <span class="n">pair</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span>
|
77
|
+
<span class="n">index</span> <span class="o">=</span> <span class="n">pair</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="o">+</span> <span class="mi">3</span> <span class="c1"># hardcoded for now... no way to get this value from ANTLR</span>
|
78
|
+
|
79
|
+
<span class="k">if</span> <span class="nb">name</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">==</span> <span class="sc">?'</span>
|
80
|
+
<span class="nb">hash</span><span class="o">[</span><span class="ss">:"T__</span><span class="si">#{</span><span class="n">index</span><span class="si">}</span><span class="ss">"</span><span class="o">]</span> <span class="o">=</span> <span class="n">index</span>
|
81
|
+
<span class="k">else</span>
|
82
|
+
<span class="nb">hash</span><span class="o">[</span><span class="ss">:"</span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="ss">"</span><span class="o">]</span> <span class="o">=</span> <span class="n">index</span>
|
83
|
+
<span class="k">end</span>
|
84
|
+
|
85
|
+
<span class="nb">hash</span>
|
86
|
+
<span class="p">}</span>
|
87
|
+
|
88
|
+
<span class="no">TOKENS</span><span class="o">[</span><span class="ss">:EOF</span><span class="o">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
89
|
+
|
90
|
+
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
|
91
|
+
<span class="k">if</span> <span class="n">input</span><span class="o">.</span><span class="n">respond_to?</span><span class="p">(</span><span class="ss">:to_str</span><span class="p">)</span> <span class="o">||</span> <span class="n">input</span><span class="o">.</span><span class="n">respond_to?</span><span class="p">(</span><span class="ss">:read</span><span class="p">)</span>
|
92
|
+
<span class="n">input</span> <span class="o">=</span> <span class="no">ExcelFormulaLexer</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
|
93
|
+
<span class="k">end</span>
|
94
|
+
|
95
|
+
<span class="vi">@lexer</span> <span class="o">=</span> <span class="n">input</span>
|
96
|
+
<span class="vi">@input</span> <span class="o">=</span> <span class="no">TokenStream</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
|
97
|
+
<span class="vi">@backtracking</span> <span class="o">=</span> <span class="mi">0</span>
|
98
|
+
<span class="vi">@failed</span> <span class="o">=</span> <span class="kp">false</span>
|
99
|
+
|
100
|
+
|
101
|
+
<span class="vi">@rpn</span> <span class="o">=</span> <span class="s1">''</span>
|
102
|
+
<span class="vi">@sheet_references</span> <span class="o">=</span> <span class="o">[]</span>
|
103
|
+
<span class="vi">@xcall_references</span> <span class="o">=</span> <span class="o">[]</span>
|
104
|
+
|
105
|
+
|
106
|
+
<span class="k">end</span>
|
107
|
+
|
108
|
+
<span class="c1"># 22:1: formula : expr[\"V\"] ;</span>
|
109
|
+
<span class="k">def</span> <span class="nf">formula</span><span class="p">()</span>
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
<span class="c1"># 23:7: expr[\"V\"]</span>
|
114
|
+
<span class="n">expr</span><span class="p">(</span><span class="s2">"V"</span><span class="p">)</span>
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
<span class="k">end</span>
|
120
|
+
|
121
|
+
<span class="c1"># 26:1: expr[arg_type] : prec0_expr[arg_type] ( ( EQ ) prec0_expr[arg_type] )* ;</span>
|
122
|
+
<span class="k">def</span> <span class="nf">expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
<span class="c1"># 27:7: prec0_expr[arg_type] ( ( EQ ) prec0_expr[arg_type] )*</span>
|
127
|
+
<span class="n">prec0_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
128
|
+
|
129
|
+
<span class="c1"># 28:9: ( ( EQ ) prec0_expr[arg_type] )*</span>
|
130
|
+
<span class="k">while</span> <span class="kp">true</span>
|
131
|
+
<span class="n">alt1</span> <span class="o">=</span> <span class="mi">2</span>
|
132
|
+
<span class="c1"># </span>
|
133
|
+
<span class="n">look_ahead1_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
134
|
+
<span class="k">if</span> <span class="n">look_ahead1_0</span> <span class="o">==</span> <span class="ss">:EQ</span>
|
135
|
+
<span class="n">alt1</span> <span class="o">=</span> <span class="mi">1</span>
|
136
|
+
<span class="k">end</span>
|
137
|
+
<span class="k">case</span> <span class="n">alt1</span>
|
138
|
+
<span class="k">when</span> <span class="mi">1</span>
|
139
|
+
<span class="c1"># 29:13: ( EQ ) prec0_expr[arg_type]</span>
|
140
|
+
<span class="c1"># 30:19: EQ</span>
|
141
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:EQ</span><span class="p">)</span>
|
142
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGEQ</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
143
|
+
<span class="n">prec0_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
144
|
+
|
145
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="n">op</span>
|
146
|
+
<span class="k">else</span>
|
147
|
+
<span class="k">break</span>
|
148
|
+
<span class="k">end</span>
|
149
|
+
<span class="k">end</span>
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
<span class="k">end</span>
|
154
|
+
|
155
|
+
<span class="c1"># 42:1: prec0_expr[arg_type] : prec1_expr[arg_type] ( ( CONCAT ) prec1_expr[arg_type] )* ;</span>
|
156
|
+
<span class="k">def</span> <span class="nf">prec0_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
<span class="c1"># 43:7: prec1_expr[arg_type] ( ( CONCAT ) prec1_expr[arg_type] )*</span>
|
161
|
+
<span class="n">prec1_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
162
|
+
|
163
|
+
<span class="c1"># 44:9: ( ( CONCAT ) prec1_expr[arg_type] )*</span>
|
164
|
+
<span class="k">while</span> <span class="kp">true</span>
|
165
|
+
<span class="n">alt2</span> <span class="o">=</span> <span class="mi">2</span>
|
166
|
+
<span class="c1"># </span>
|
167
|
+
<span class="n">look_ahead2_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
168
|
+
<span class="k">if</span> <span class="n">look_ahead2_0</span> <span class="o">==</span> <span class="ss">:CONCAT</span>
|
169
|
+
<span class="n">alt2</span> <span class="o">=</span> <span class="mi">1</span>
|
170
|
+
<span class="k">end</span>
|
171
|
+
<span class="k">case</span> <span class="n">alt2</span>
|
172
|
+
<span class="k">when</span> <span class="mi">1</span>
|
173
|
+
<span class="c1"># 45:13: ( CONCAT ) prec1_expr[arg_type]</span>
|
174
|
+
<span class="c1"># 46:17: CONCAT</span>
|
175
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:CONCAT</span><span class="p">)</span>
|
176
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGCONCAT</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
177
|
+
<span class="n">prec1_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
178
|
+
|
179
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="n">op</span>
|
180
|
+
<span class="k">else</span>
|
181
|
+
<span class="k">break</span>
|
182
|
+
<span class="k">end</span>
|
183
|
+
<span class="k">end</span>
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
<span class="k">end</span>
|
188
|
+
|
189
|
+
<span class="c1"># 52:1: prec1_expr[arg_type] : prec2_expr[arg_type] ( ( ADD | SUB ) prec2_expr[arg_type] )* ;</span>
|
190
|
+
<span class="k">def</span> <span class="nf">prec1_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
<span class="c1"># 53:7: prec2_expr[arg_type] ( ( ADD | SUB ) prec2_expr[arg_type] )*</span>
|
195
|
+
<span class="n">prec2_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
196
|
+
|
197
|
+
<span class="c1"># 54:9: ( ( ADD | SUB ) prec2_expr[arg_type] )*</span>
|
198
|
+
<span class="k">while</span> <span class="kp">true</span>
|
199
|
+
<span class="n">alt4</span> <span class="o">=</span> <span class="mi">2</span>
|
200
|
+
<span class="c1"># </span>
|
201
|
+
<span class="n">look_ahead4_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
202
|
+
<span class="k">if</span> <span class="p">(</span><span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead4_0</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">6</span> <span class="o">&&</span> <span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead4_0</span><span class="o">]</span> <span class="o"><=</span> <span class="mi">7</span><span class="p">)</span>
|
203
|
+
<span class="n">alt4</span> <span class="o">=</span> <span class="mi">1</span>
|
204
|
+
<span class="k">end</span>
|
205
|
+
<span class="k">case</span> <span class="n">alt4</span>
|
206
|
+
<span class="k">when</span> <span class="mi">1</span>
|
207
|
+
<span class="c1"># 55:13: ( ADD | SUB ) prec2_expr[arg_type]</span>
|
208
|
+
<span class="c1"># 55:13: ( ADD | SUB )</span>
|
209
|
+
<span class="n">alt3</span> <span class="o">=</span> <span class="mi">2</span>
|
210
|
+
<span class="c1"># </span>
|
211
|
+
<span class="n">look_ahead3_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
212
|
+
<span class="k">if</span> <span class="n">look_ahead3_0</span> <span class="o">==</span> <span class="ss">:ADD</span>
|
213
|
+
<span class="n">alt3</span> <span class="o">=</span> <span class="mi">1</span>
|
214
|
+
<span class="k">elsif</span> <span class="n">look_ahead3_0</span> <span class="o">==</span> <span class="ss">:SUB</span>
|
215
|
+
<span class="n">alt3</span> <span class="o">=</span> <span class="mi">2</span>
|
216
|
+
<span class="k">else</span>
|
217
|
+
<span class="k">raise</span> <span class="s2">"Expected: "</span>
|
218
|
+
<span class="k">end</span>
|
219
|
+
<span class="k">case</span> <span class="n">alt3</span>
|
220
|
+
<span class="k">when</span> <span class="mi">1</span>
|
221
|
+
<span class="c1"># 56:19: ADD</span>
|
222
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:ADD</span><span class="p">)</span>
|
223
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGADD</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
224
|
+
<span class="k">when</span> <span class="mi">2</span>
|
225
|
+
<span class="c1"># 57:19: SUB</span>
|
226
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:SUB</span><span class="p">)</span>
|
227
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGSUB</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
228
|
+
<span class="k">end</span>
|
229
|
+
<span class="n">prec2_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
230
|
+
|
231
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="n">op</span>
|
232
|
+
<span class="k">else</span>
|
233
|
+
<span class="k">break</span>
|
234
|
+
<span class="k">end</span>
|
235
|
+
<span class="k">end</span>
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
<span class="k">end</span>
|
240
|
+
|
241
|
+
<span class="c1"># 64:1: prec2_expr[arg_type] : prec3_expr[arg_type] ( ( MUL | DIV ) prec3_expr[arg_type] )* ;</span>
|
242
|
+
<span class="k">def</span> <span class="nf">prec2_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
<span class="c1"># 65:7: prec3_expr[arg_type] ( ( MUL | DIV ) prec3_expr[arg_type] )*</span>
|
247
|
+
<span class="n">prec3_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
248
|
+
|
249
|
+
<span class="c1"># 66:9: ( ( MUL | DIV ) prec3_expr[arg_type] )*</span>
|
250
|
+
<span class="k">while</span> <span class="kp">true</span>
|
251
|
+
<span class="n">alt6</span> <span class="o">=</span> <span class="mi">2</span>
|
252
|
+
<span class="c1"># </span>
|
253
|
+
<span class="n">look_ahead6_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
254
|
+
<span class="k">if</span> <span class="p">(</span><span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead6_0</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">8</span> <span class="o">&&</span> <span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead6_0</span><span class="o">]</span> <span class="o"><=</span> <span class="mi">9</span><span class="p">)</span>
|
255
|
+
<span class="n">alt6</span> <span class="o">=</span> <span class="mi">1</span>
|
256
|
+
<span class="k">end</span>
|
257
|
+
<span class="k">case</span> <span class="n">alt6</span>
|
258
|
+
<span class="k">when</span> <span class="mi">1</span>
|
259
|
+
<span class="c1"># 67:13: ( MUL | DIV ) prec3_expr[arg_type]</span>
|
260
|
+
<span class="c1"># 67:13: ( MUL | DIV )</span>
|
261
|
+
<span class="n">alt5</span> <span class="o">=</span> <span class="mi">2</span>
|
262
|
+
<span class="c1"># </span>
|
263
|
+
<span class="n">look_ahead5_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
264
|
+
<span class="k">if</span> <span class="n">look_ahead5_0</span> <span class="o">==</span> <span class="ss">:MUL</span>
|
265
|
+
<span class="n">alt5</span> <span class="o">=</span> <span class="mi">1</span>
|
266
|
+
<span class="k">elsif</span> <span class="n">look_ahead5_0</span> <span class="o">==</span> <span class="ss">:DIV</span>
|
267
|
+
<span class="n">alt5</span> <span class="o">=</span> <span class="mi">2</span>
|
268
|
+
<span class="k">else</span>
|
269
|
+
<span class="k">raise</span> <span class="s2">"Expected: "</span>
|
270
|
+
<span class="k">end</span>
|
271
|
+
<span class="k">case</span> <span class="n">alt5</span>
|
272
|
+
<span class="k">when</span> <span class="mi">1</span>
|
273
|
+
<span class="c1"># 68:19: MUL</span>
|
274
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:MUL</span><span class="p">)</span>
|
275
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGMUL</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
276
|
+
<span class="k">when</span> <span class="mi">2</span>
|
277
|
+
<span class="c1"># 69:19: DIV</span>
|
278
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:DIV</span><span class="p">)</span>
|
279
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGDIV</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
280
|
+
<span class="k">end</span>
|
281
|
+
<span class="n">prec3_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
282
|
+
|
283
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="n">op</span>
|
284
|
+
<span class="k">else</span>
|
285
|
+
<span class="k">break</span>
|
286
|
+
<span class="k">end</span>
|
287
|
+
<span class="k">end</span>
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
<span class="k">end</span>
|
292
|
+
|
293
|
+
<span class="c1"># 75:1: prec3_expr[arg_type] : prec5_expr[arg_type] ( ( POWER ) prec5_expr[arg_type] )* ;</span>
|
294
|
+
<span class="k">def</span> <span class="nf">prec3_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
295
|
+
|
296
|
+
|
297
|
+
|
298
|
+
<span class="c1"># 76:7: prec5_expr[arg_type] ( ( POWER ) prec5_expr[arg_type] )*</span>
|
299
|
+
<span class="n">prec5_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
300
|
+
|
301
|
+
<span class="c1"># 77:9: ( ( POWER ) prec5_expr[arg_type] )*</span>
|
302
|
+
<span class="k">while</span> <span class="kp">true</span>
|
303
|
+
<span class="n">alt7</span> <span class="o">=</span> <span class="mi">2</span>
|
304
|
+
<span class="c1"># </span>
|
305
|
+
<span class="n">look_ahead7_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
306
|
+
<span class="k">if</span> <span class="n">look_ahead7_0</span> <span class="o">==</span> <span class="ss">:POWER</span>
|
307
|
+
<span class="n">alt7</span> <span class="o">=</span> <span class="mi">1</span>
|
308
|
+
<span class="k">end</span>
|
309
|
+
<span class="k">case</span> <span class="n">alt7</span>
|
310
|
+
<span class="k">when</span> <span class="mi">1</span>
|
311
|
+
<span class="c1"># 78:13: ( POWER ) prec5_expr[arg_type]</span>
|
312
|
+
<span class="c1"># 79:17: POWER</span>
|
313
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:POWER</span><span class="p">)</span>
|
314
|
+
<span class="n">op</span> <span class="o">=</span> <span class="o">[</span><span class="no">PTGPOWER</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
315
|
+
<span class="n">prec5_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
316
|
+
|
317
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="n">op</span>
|
318
|
+
<span class="k">else</span>
|
319
|
+
<span class="k">break</span>
|
320
|
+
<span class="k">end</span>
|
321
|
+
<span class="k">end</span>
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
<span class="k">end</span>
|
326
|
+
|
327
|
+
<span class="c1"># 85:1: prec4_expr[arg_type] : prec5_expr[arg_type] ( PERCENT )? ;</span>
|
328
|
+
<span class="k">def</span> <span class="nf">prec4_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
<span class="c1"># 86:7: prec5_expr[arg_type] ( PERCENT )?</span>
|
333
|
+
<span class="n">prec5_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
334
|
+
|
335
|
+
<span class="c1"># 87:9: ( PERCENT )?</span>
|
336
|
+
<span class="n">alt8</span> <span class="o">=</span> <span class="mi">2</span>
|
337
|
+
<span class="c1"># </span>
|
338
|
+
<span class="n">look_ahead8_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
339
|
+
|
340
|
+
<span class="k">if</span> <span class="n">look_ahead8_0</span> <span class="o">==</span> <span class="ss">:PERCENT</span>
|
341
|
+
<span class="n">alt8</span> <span class="o">=</span> <span class="mi">1</span>
|
342
|
+
<span class="k">end</span>
|
343
|
+
<span class="k">case</span> <span class="n">alt8</span>
|
344
|
+
<span class="k">when</span> <span class="mi">1</span>
|
345
|
+
<span class="c1"># 88:13: PERCENT</span>
|
346
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:PERCENT</span><span class="p">)</span>
|
347
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGPERCENT</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
348
|
+
<span class="k">end</span>
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
<span class="k">end</span>
|
353
|
+
|
354
|
+
<span class="c1"># 92:1: prec5_expr[arg_type] : ( primary[arg_type] | SUB primary[arg_type] );</span>
|
355
|
+
<span class="k">def</span> <span class="nf">prec5_expr</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
<span class="c1"># 93:5: ( primary[arg_type] | SUB primary[arg_type] )</span>
|
360
|
+
<span class="n">alt9</span> <span class="o">=</span> <span class="mi">2</span>
|
361
|
+
<span class="c1"># </span>
|
362
|
+
<span class="n">look_ahead9_0</span> <span class="o">=</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
363
|
+
<span class="k">if</span> <span class="p">(</span><span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead9_0</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">12</span> <span class="o">&&</span> <span class="no">TOKENS</span><span class="o">[</span><span class="n">look_ahead9_0</span><span class="o">]</span> <span class="o"><=</span> <span class="mi">17</span><span class="p">)</span>
|
364
|
+
<span class="n">alt9</span> <span class="o">=</span> <span class="mi">1</span>
|
365
|
+
<span class="k">elsif</span> <span class="n">look_ahead9_0</span> <span class="o">==</span> <span class="ss">:SUB</span>
|
366
|
+
<span class="n">alt9</span> <span class="o">=</span> <span class="mi">2</span>
|
367
|
+
<span class="k">else</span>
|
368
|
+
<span class="k">raise</span> <span class="s2">"Expected: "</span>
|
369
|
+
<span class="k">end</span>
|
370
|
+
<span class="k">case</span> <span class="n">alt9</span>
|
371
|
+
<span class="k">when</span> <span class="mi">1</span>
|
372
|
+
<span class="c1"># 93:7: primary[arg_type]</span>
|
373
|
+
<span class="n">primary</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
374
|
+
|
375
|
+
<span class="k">when</span> <span class="mi">2</span>
|
376
|
+
<span class="c1"># 94:7: SUB primary[arg_type]</span>
|
377
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:SUB</span><span class="p">)</span>
|
378
|
+
<span class="n">primary</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
379
|
+
|
380
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGUMINUS</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span>
|
381
|
+
<span class="k">end</span>
|
382
|
+
|
383
|
+
|
384
|
+
|
385
|
+
<span class="k">end</span>
|
386
|
+
|
387
|
+
<span class="c1"># 97:1: primary[arg_type] : ( TRUE_CONST | FALSE_CONST | str_tok= STR_CONST | int_tok= INT_CONST | num_tok= NUM_CONST | ref2d_tok= REF2D | ref2d1_tok= REF2D COLON ref2d2_tok= REF2D );</span>
|
388
|
+
<span class="k">def</span> <span class="nf">primary</span><span class="p">(</span><span class="n">arg_type</span><span class="p">)</span>
|
389
|
+
<span class="n">_str_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
390
|
+
<span class="n">_int_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
391
|
+
<span class="n">_num_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
392
|
+
<span class="n">_ref2d_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
393
|
+
<span class="n">_ref2d1_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
394
|
+
<span class="n">_ref2d2_tok</span> <span class="o">=</span> <span class="kp">nil</span>
|
395
|
+
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
<span class="c1"># 98:5: ( TRUE_CONST | FALSE_CONST | str_tok= STR_CONST | int_tok= INT_CONST | num_tok= NUM_CONST | ref2d_tok= REF2D | ref2d1_tok= REF2D COLON ref2d2_tok= REF2D )</span>
|
400
|
+
<span class="n">alt10</span> <span class="o">=</span> <span class="mi">7</span>
|
401
|
+
<span class="n">alt10</span> <span class="o">=</span> <span class="no">DFA10</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="nb">self</span><span class="p">,</span> <span class="vi">@input</span><span class="p">)</span>
|
402
|
+
<span class="k">case</span> <span class="n">alt10</span>
|
403
|
+
<span class="k">when</span> <span class="mi">1</span>
|
404
|
+
<span class="c1"># 98:7: TRUE_CONST</span>
|
405
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:TRUE_CONST</span><span class="p">)</span>
|
406
|
+
|
407
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGBOOL</span><span class="p">,</span> <span class="mi">1</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"C2"</span><span class="p">)</span>
|
408
|
+
|
409
|
+
<span class="k">when</span> <span class="mi">2</span>
|
410
|
+
<span class="c1"># 102:7: FALSE_CONST</span>
|
411
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:FALSE_CONST</span><span class="p">)</span>
|
412
|
+
|
413
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGBOOL</span><span class="p">,</span> <span class="mi">0</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"C2"</span><span class="p">)</span>
|
414
|
+
|
415
|
+
<span class="k">when</span> <span class="mi">3</span>
|
416
|
+
<span class="c1"># 106:7: str_tok= STR_CONST</span>
|
417
|
+
<span class="n">_str_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
418
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:STR_CONST</span><span class="p">)</span>
|
419
|
+
|
420
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGSTR</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s1">'C'</span><span class="p">)</span> <span class="o">+</span> <span class="n">upack1</span><span class="p">(</span><span class="n">str_tok</span><span class="o">.</span><span class="n">text</span><span class="o">[</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">)</span> <span class="c1">#TODO</span>
|
421
|
+
|
422
|
+
<span class="k">when</span> <span class="mi">4</span>
|
423
|
+
<span class="c1"># 110:7: int_tok= INT_CONST</span>
|
424
|
+
<span class="n">_int_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
425
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:INT_CONST</span><span class="p">)</span>
|
426
|
+
|
427
|
+
<span class="n">int_value</span> <span class="o">=</span> <span class="n">int_tok</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">to_i</span>
|
428
|
+
<span class="k">if</span> <span class="n">int_value</span> <span class="o"><=</span> <span class="mi">65535</span>
|
429
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGINT</span><span class="p">,</span> <span class="n">int_value</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"Cv"</span><span class="p">)</span>
|
430
|
+
<span class="k">else</span>
|
431
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="no">PTGNUM</span><span class="p">,</span> <span class="n">int_value</span><span class="o">.</span><span class="n">to_f</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"CE"</span><span class="p">)</span>
|
432
|
+
<span class="k">end</span>
|
433
|
+
|
434
|
+
<span class="k">when</span> <span class="mi">5</span>
|
435
|
+
<span class="c1"># 119:7: num_tok= NUM_CONST</span>
|
436
|
+
<span class="n">_num_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
437
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:NUM_CONST</span><span class="p">)</span>
|
438
|
+
|
439
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="n">ptgNum</span><span class="p">,</span> <span class="n">num_tok</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">to_f</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"CE"</span><span class="p">)</span>
|
440
|
+
|
441
|
+
<span class="k">when</span> <span class="mi">6</span>
|
442
|
+
<span class="c1"># 123:7: ref2d_tok= REF2D</span>
|
443
|
+
<span class="n">_ref2d_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
444
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:REF2D</span><span class="p">)</span>
|
445
|
+
|
446
|
+
<span class="n">r</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="no">Utils</span><span class="o">.</span><span class="n">cell_to_packed_rowcol</span><span class="p">(</span><span class="n">ref2d_tok</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="c1"># TODO</span>
|
447
|
+
<span class="n">ptg</span> <span class="o">=</span> <span class="no">PTGREFR</span> <span class="o">+</span> <span class="no">RVA_DELTA</span><span class="o">[</span><span class="n">arg_type</span><span class="o">]</span>
|
448
|
+
<span class="vi">@rpn</span> <span class="o">+=</span> <span class="o">[</span><span class="n">ptg</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">c</span><span class="o">].</span><span class="n">pack</span><span class="p">(</span><span class="s2">"Cv2"</span><span class="p">)</span>
|
449
|
+
|
450
|
+
<span class="k">when</span> <span class="mi">7</span>
|
451
|
+
<span class="c1"># 129:7: ref2d1_tok= REF2D COLON ref2d2_tok= REF2D</span>
|
452
|
+
<span class="n">_ref2d1_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
453
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:REF2D</span><span class="p">)</span>
|
454
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:COLON</span><span class="p">)</span>
|
455
|
+
<span class="n">_ref2d2_tok</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
456
|
+
<span class="n">match</span><span class="p">(</span><span class="ss">:REF2D</span><span class="p">)</span>
|
457
|
+
|
458
|
+
<span class="n">r1</span><span class="p">,</span> <span class="n">c1</span> <span class="o">=</span> <span class="no">Utils</span><span class="o">.</span><span class="n">cell_to_packed_rowcol</span><span class="p">(</span><span class="n">ref2d1_tok</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="c1">#TODO</span>
|
459
|
+
<span class="n">r2</span><span class="p">,</span> <span class="n">c2</span> <span class="o">=</span> <span class="no">Utils</span><span class="o">.</span><span class="n">cell_to_packed_rowcol</span><span class="p">(</span><span class="n">ref2d2_tok</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="c1">#TODO</span>
|
460
|
+
<span class="n">ptg</span> <span class="o">=</span> <span class="no">PTGAREAR</span> <span class="o">+</span> <span class="no">RVA_DELTA</span><span class="o">[</span><span class="n">arg_type</span><span class="o">]</span>
|
461
|
+
<span class="nb">self</span><span class="o">.</span><span class="n">rpn</span> <span class="o">+=</span> <span class="n">struct</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="s2">"Cv4"</span><span class="p">,</span> <span class="n">ptg</span><span class="p">,</span> <span class="n">r1</span><span class="p">,</span> <span class="n">r2</span><span class="p">,</span> <span class="n">c1</span><span class="p">,</span> <span class="n">c2</span><span class="p">)</span>
|
462
|
+
|
463
|
+
<span class="k">end</span>
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
<span class="k">end</span>
|
468
|
+
|
469
|
+
|
470
|
+
<span class="kp">attr_accessor</span> <span class="ss">:rpn</span>
|
471
|
+
|
472
|
+
|
473
|
+
<span class="kp">private</span>
|
474
|
+
|
475
|
+
<span class="k">class</span> <span class="nc">TokenStream</span>
|
476
|
+
<span class="kp">attr_reader</span> <span class="ss">:index</span>
|
477
|
+
|
478
|
+
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
|
479
|
+
<span class="vi">@buffer</span> <span class="o">=</span> <span class="o">[]</span>
|
480
|
+
<span class="vi">@input</span> <span class="o">=</span> <span class="n">input</span>
|
481
|
+
<span class="vi">@channel</span> <span class="o">=</span> <span class="kp">nil</span>
|
482
|
+
|
483
|
+
<span class="vi">@index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
484
|
+
<span class="k">end</span>
|
485
|
+
|
486
|
+
<span class="c1"># returns a Token</span>
|
487
|
+
<span class="k">def</span> <span class="nf">look_ahead</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
|
488
|
+
<span class="n">offset</span> <span class="o">=</span> <span class="vi">@index</span> <span class="o">+</span> <span class="n">pos</span> <span class="o">-</span> <span class="mi">1</span>
|
489
|
+
|
490
|
+
<span class="k">while</span> <span class="vi">@buffer</span><span class="o">[-</span><span class="mi">1</span><span class="o">]</span> <span class="o">!=</span> <span class="ss">:EOF</span> <span class="o">&&</span> <span class="vi">@buffer</span><span class="o">.</span><span class="n">length</span> <span class="o"><</span> <span class="n">offset</span> <span class="o">+</span> <span class="mi">1</span>
|
491
|
+
<span class="n">token</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">next_token</span>
|
492
|
+
<span class="k">if</span> <span class="n">token</span> <span class="o">==</span> <span class="ss">:EOF</span> <span class="o">||</span> <span class="n">token</span><span class="o">.</span><span class="n">channel</span> <span class="o">==</span> <span class="vi">@channel</span>
|
493
|
+
<span class="vi">@buffer</span> <span class="o"><<</span> <span class="n">token</span>
|
494
|
+
<span class="k">end</span>
|
495
|
+
<span class="k">end</span>
|
496
|
+
|
497
|
+
<span class="n">offset</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="k">if</span> <span class="n">offset</span> <span class="o">>=</span> <span class="vi">@buffer</span><span class="o">.</span><span class="n">length</span>
|
498
|
+
<span class="k">if</span> <span class="n">offset</span> <span class="o"><</span> <span class="vi">@buffer</span><span class="o">.</span><span class="n">length</span>
|
499
|
+
<span class="vi">@buffer</span><span class="o">[</span><span class="n">offset</span><span class="o">]</span>
|
500
|
+
<span class="k">end</span>
|
501
|
+
<span class="k">end</span>
|
502
|
+
|
503
|
+
<span class="k">def</span> <span class="nf">mark</span>
|
504
|
+
<span class="vi">@state</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">:index</span> <span class="o">=></span> <span class="vi">@index</span> <span class="p">}</span>
|
505
|
+
<span class="k">return</span> <span class="mi">0</span>
|
506
|
+
<span class="k">end</span>
|
507
|
+
|
508
|
+
<span class="k">def</span> <span class="nf">rewind</span><span class="p">(</span><span class="n">marker</span><span class="p">)</span>
|
509
|
+
<span class="vi">@index</span> <span class="o">=</span> <span class="vi">@state</span><span class="o">[</span><span class="ss">:index</span><span class="o">]</span>
|
510
|
+
<span class="k">end</span>
|
511
|
+
|
512
|
+
<span class="k">def</span> <span class="nf">consume</span>
|
513
|
+
<span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># force a read from the input if necessary</span>
|
514
|
+
<span class="vi">@index</span> <span class="o">=</span> <span class="vi">@index</span> <span class="o">+</span> <span class="mi">1</span>
|
515
|
+
<span class="k">end</span>
|
516
|
+
<span class="k">end</span>
|
517
|
+
|
518
|
+
<span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="n">token</span> <span class="o">=</span> <span class="kp">nil</span><span class="p">)</span>
|
519
|
+
<span class="k">if</span> <span class="n">token</span><span class="o">.</span><span class="n">nil?</span> <span class="o">||</span> <span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="n">token</span>
|
520
|
+
<span class="vi">@input</span><span class="o">.</span><span class="n">consume</span>
|
521
|
+
<span class="vi">@failed</span> <span class="o">=</span> <span class="kp">false</span>
|
522
|
+
<span class="k">return</span>
|
523
|
+
<span class="k">elsif</span> <span class="vi">@backtracking</span> <span class="o">></span> <span class="mi">0</span>
|
524
|
+
<span class="vi">@failed</span> <span class="o">=</span> <span class="kp">true</span>
|
525
|
+
<span class="k">else</span>
|
526
|
+
<span class="k">raise</span> <span class="s2">"Expected </span><span class="si">#{</span><span class="n">token</span><span class="si">}</span><span class="s2">"</span>
|
527
|
+
<span class="k">end</span>
|
528
|
+
<span class="k">end</span>
|
529
|
+
|
530
|
+
<span class="k">def</span> <span class="nf">look_ahead</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
|
531
|
+
<span class="n">token</span> <span class="o">=</span> <span class="vi">@input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
|
532
|
+
<span class="k">if</span> <span class="n">token</span> <span class="o">!=</span> <span class="ss">:EOF</span>
|
533
|
+
<span class="n">token</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span>
|
534
|
+
<span class="k">end</span>
|
535
|
+
|
536
|
+
<span class="n">token</span>
|
537
|
+
<span class="k">end</span>
|
538
|
+
|
539
|
+
|
540
|
+
<span class="k">class</span> <span class="nc">DFA</span>
|
541
|
+
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">eot</span><span class="p">,</span> <span class="n">eof</span><span class="p">,</span> <span class="n">min</span><span class="p">,</span> <span class="n">max</span><span class="p">,</span> <span class="n">accept</span><span class="p">,</span> <span class="n">special</span><span class="p">,</span> <span class="n">transition</span><span class="p">)</span>
|
542
|
+
<span class="vi">@eot</span> <span class="o">=</span> <span class="n">eot</span>
|
543
|
+
<span class="vi">@eof</span> <span class="o">=</span> <span class="n">eof</span>
|
544
|
+
<span class="vi">@min</span> <span class="o">=</span> <span class="n">min</span>
|
545
|
+
<span class="vi">@max</span> <span class="o">=</span> <span class="n">max</span>
|
546
|
+
<span class="vi">@accept</span> <span class="o">=</span> <span class="n">accept</span>
|
547
|
+
<span class="vi">@special</span> <span class="o">=</span> <span class="n">special</span>
|
548
|
+
<span class="vi">@transition</span> <span class="o">=</span> <span class="n">transition</span>
|
549
|
+
<span class="k">end</span>
|
550
|
+
|
551
|
+
<span class="k">def</span> <span class="nf">predict</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">input</span><span class="p">)</span>
|
552
|
+
<span class="n">mark</span> <span class="o">=</span> <span class="n">input</span><span class="o">.</span><span class="n">mark</span><span class="p">()</span>
|
553
|
+
<span class="n">s</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># we always start at s0</span>
|
554
|
+
<span class="k">begin</span>
|
555
|
+
<span class="kp">loop</span> <span class="k">do</span>
|
556
|
+
<span class="n">special_state</span> <span class="o">=</span> <span class="vi">@special</span><span class="o">[</span><span class="n">s</span><span class="o">]</span>
|
557
|
+
<span class="k">if</span> <span class="n">special_state</span> <span class="o">>=</span> <span class="mi">0</span>
|
558
|
+
<span class="n">s</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">special_state_transition</span><span class="p">(</span><span class="n">special_state</span><span class="p">)</span>
|
559
|
+
<span class="n">input</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span>
|
560
|
+
<span class="k">next</span>
|
561
|
+
<span class="k">end</span>
|
562
|
+
|
563
|
+
<span class="k">if</span> <span class="vi">@accept</span><span class="o">[</span><span class="n">s</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">1</span>
|
564
|
+
<span class="k">return</span> <span class="vi">@accept</span><span class="o">[</span><span class="n">s</span><span class="o">]</span>
|
565
|
+
<span class="k">end</span>
|
566
|
+
|
567
|
+
<span class="c1"># look for a normal char transition</span>
|
568
|
+
<span class="n">c</span> <span class="o">=</span> <span class="n">input</span><span class="o">.</span><span class="n">look_ahead</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">to_i</span>
|
569
|
+
<span class="k">if</span> <span class="n">c</span> <span class="o">!=</span> <span class="ss">:EOF</span> <span class="o">&&</span> <span class="n">c</span> <span class="o">>=</span> <span class="vi">@min</span><span class="o">[</span><span class="n">s</span><span class="o">]</span> <span class="o">&&</span> <span class="n">c</span> <span class="o"><=</span> <span class="vi">@max</span><span class="o">[</span><span class="n">s</span><span class="o">]</span>
|
570
|
+
<span class="n">next_state</span> <span class="o">=</span> <span class="vi">@transition</span><span class="o">[</span><span class="n">s</span><span class="o">][</span><span class="n">c</span> <span class="o">-</span> <span class="vi">@min</span><span class="o">[</span><span class="n">s</span><span class="o">]]</span> <span class="c1"># move to next state</span>
|
571
|
+
<span class="k">if</span> <span class="n">next_state</span> <span class="o"><</span> <span class="mi">0</span>
|
572
|
+
<span class="c1"># was in range but not a normal transition</span>
|
573
|
+
<span class="c1"># must check EOT, which is like the else clause.</span>
|
574
|
+
<span class="c1"># eot[s]>=0 indicates that an EOT edge goes to another</span>
|
575
|
+
<span class="c1"># state.</span>
|
576
|
+
<span class="k">if</span> <span class="vi">@eot</span><span class="o">[</span><span class="n">s</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">0</span> <span class="c1"># EOT Transition to accept state?</span>
|
577
|
+
<span class="n">s</span> <span class="o">=</span> <span class="vi">@eot</span><span class="o">[</span><span class="n">s</span><span class="o">]</span>
|
578
|
+
<span class="n">input</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span>
|
579
|
+
<span class="k">next</span>
|
580
|
+
<span class="k">end</span>
|
581
|
+
<span class="k">raise</span> <span class="s2">"No viable alt"</span>
|
582
|
+
<span class="k">end</span>
|
583
|
+
<span class="n">s</span> <span class="o">=</span> <span class="n">next_state</span>
|
584
|
+
<span class="n">input</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span>
|
585
|
+
<span class="k">next</span>
|
586
|
+
<span class="k">end</span>
|
587
|
+
<span class="k">if</span> <span class="vi">@eot</span><span class="o">[</span><span class="n">s</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">0</span> <span class="c1"># EOT Transition?</span>
|
588
|
+
<span class="n">s</span> <span class="o">=</span> <span class="vi">@eot</span><span class="o">[</span><span class="n">s</span><span class="o">]</span>
|
589
|
+
<span class="n">input</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span>
|
590
|
+
<span class="k">next</span>
|
591
|
+
<span class="k">end</span>
|
592
|
+
<span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="ss">:EOF</span> <span class="o">&&</span> <span class="vi">@eof</span><span class="o">[</span><span class="n">s</span><span class="o">]</span> <span class="o">>=</span> <span class="mi">0</span> <span class="c1"># EOF Transition to accept state?</span>
|
593
|
+
<span class="k">return</span> <span class="vi">@accept</span><span class="o">[</span><span class="vi">@eof</span><span class="o">[</span><span class="n">s</span><span class="o">]]</span>
|
594
|
+
<span class="k">end</span>
|
595
|
+
|
596
|
+
<span class="c1"># not in range and not EOF/EOT, must be invalid symbol</span>
|
597
|
+
<span class="k">raise</span> <span class="s2">"No viable alt"</span>
|
598
|
+
<span class="k">end</span>
|
599
|
+
<span class="k">ensure</span>
|
600
|
+
<span class="n">input</span><span class="o">.</span><span class="n">rewind</span><span class="p">(</span><span class="n">mark</span><span class="p">)</span>
|
601
|
+
<span class="k">end</span>
|
602
|
+
<span class="k">end</span>
|
603
|
+
<span class="k">end</span>
|
604
|
+
|
605
|
+
<span class="no">DFA10</span> <span class="o">=</span> <span class="no">DFA</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
|
606
|
+
<span class="o">[-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
|
607
|
+
<span class="o">[-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
|
608
|
+
<span class="o">[</span><span class="mi">12</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="o">]</span><span class="p">,</span>
|
609
|
+
<span class="o">[</span><span class="mi">17</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="o">]</span><span class="p">,</span>
|
610
|
+
<span class="o">[-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
|
611
|
+
<span class="o">[-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
|
612
|
+
<span class="o">[</span>
|
613
|
+
<span class="o">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="o">]</span><span class="p">,</span>
|
614
|
+
<span class="o">[]</span><span class="p">,</span>
|
615
|
+
<span class="o">[]</span><span class="p">,</span>
|
616
|
+
<span class="o">[]</span><span class="p">,</span>
|
617
|
+
<span class="o">[]</span><span class="p">,</span>
|
618
|
+
<span class="o">[]</span><span class="p">,</span>
|
619
|
+
<span class="o">[</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">7</span><span class="o">]</span><span class="p">,</span>
|
620
|
+
<span class="o">[]</span><span class="p">,</span>
|
621
|
+
<span class="o">[]</span><span class="p">,</span>
|
622
|
+
<span class="o">[]</span><span class="p">,</span>
|
623
|
+
<span class="o">[]</span><span class="p">,</span>
|
624
|
+
<span class="o">[]</span><span class="p">,</span>
|
625
|
+
<span class="o">[]</span><span class="p">,</span>
|
626
|
+
<span class="o">[]</span><span class="p">,</span>
|
627
|
+
<span class="o">[]</span><span class="p">,</span>
|
628
|
+
<span class="o">[]</span><span class="p">,</span>
|
629
|
+
<span class="o">[]</span>
|
630
|
+
<span class="o">]</span><span class="p">)</span>
|
631
|
+
|
632
|
+
<span class="k">def</span> <span class="nf">special_state_transition</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
633
|
+
<span class="o">-</span><span class="mi">1</span>
|
634
|
+
<span class="k">end</span>
|
635
|
+
|
636
|
+
<span class="kp">public</span> <span class="ss">:special_state_transition</span>
|
637
|
+
<span class="k">end</span>
|
638
|
+
</pre></div>
|
639
|
+
|
640
|
+
|
641
|
+
</div>
|
642
|
+
<div id="right">
|
643
|
+
<ul id="nav">
|
644
|
+
<li><a href="surpass-manual-0-0-5.pdf">Download PDF Manual</a></li>
|
645
|
+
<li><a href="http://rubyforge.org/projects/surpass">Rubyforge Project Page</a></li>
|
646
|
+
</ul>
|
647
|
+
<div class="box">
|
648
|
+
<h2 style="margin-top:17px">Latest News</h2>
|
649
|
+
<ul>
|
650
|
+
<li>...</li>
|
651
|
+
</ul>
|
652
|
+
</div>
|
653
|
+
</div>
|
654
|
+
<div id="clear"></div></div>
|
655
|
+
<div id="footer">
|
656
|
+
<p>Site template designed by <a href="http://loadfoo.org/" rel="external">LoadFoO</a>. Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" rel="external">CSS</a> & <a href="http://validator.w3.org/check?uri=referer" rel="external">XHTML</a></p>
|
657
|
+
</div>
|
658
|
+
</div>
|
659
|
+
|
660
|
+
</body>
|
661
|
+
</html>
|