EFL 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. data/README.txt +36 -0
  2. data/lib/EFL.rb +494 -0
  3. data/lib/EFL_array.rb +20 -0
  4. data/lib/EFL_errors.rb +48 -0
  5. data/lib/EFL_hash.rb +18 -0
  6. data/lib/EFL_production.rb +49 -0
  7. data/lib/EFL_regexp.rb +112 -0
  8. data/lib/EFL_regexp_generator.rb +70 -0
  9. data/lib/EFL_substitution.rb +221 -0
  10. data/lib/EFL_syntactic_sugar.rb +67 -0
  11. data/lib/Hash Doc.doc +0 -0
  12. data/lib/Limitaciones.txt +3 -0
  13. data/lib/doc/classes/Generator.html +634 -0
  14. data/lib/doc/classes/Generator.src/M000008.html +18 -0
  15. data/lib/doc/classes/Generator.src/M000009.html +18 -0
  16. data/lib/doc/classes/Generator.src/M000010.html +18 -0
  17. data/lib/doc/classes/Generator.src/M000011.html +18 -0
  18. data/lib/doc/classes/Generator.src/M000012.html +18 -0
  19. data/lib/doc/classes/Generator.src/M000013.html +18 -0
  20. data/lib/doc/classes/Generator.src/M000014.html +18 -0
  21. data/lib/doc/classes/Generator.src/M000015.html +18 -0
  22. data/lib/doc/classes/Generator.src/M000016.html +28 -0
  23. data/lib/doc/classes/Generator.src/M000017.html +24 -0
  24. data/lib/doc/classes/Generator.src/M000018.html +157 -0
  25. data/lib/doc/classes/Generator.src/M000019.html +25 -0
  26. data/lib/doc/classes/Generator.src/M000020.html +30 -0
  27. data/lib/doc/classes/Generator.src/M000021.html +32 -0
  28. data/lib/doc/classes/Generator.src/M000022.html +22 -0
  29. data/lib/doc/classes/Generator.src/M000023.html +18 -0
  30. data/lib/doc/classes/Generator.src/M000024.html +27 -0
  31. data/lib/doc/classes/Generator.src/M000025.html +22 -0
  32. data/lib/doc/classes/Generator.src/M000026.html +18 -0
  33. data/lib/doc/classes/Generator.src/M000027.html +27 -0
  34. data/lib/doc/classes/Regexp.html +271 -0
  35. data/lib/doc/classes/Regexp.src/M000028.html +37 -0
  36. data/lib/doc/classes/Regexp.src/M000029.html +29 -0
  37. data/lib/doc/classes/Regexp.src/M000030.html +32 -0
  38. data/lib/doc/created.rid +1 -0
  39. data/lib/doc/files/EFL_rb.html +147 -0
  40. data/lib/doc/files/EFL_regexp_generator_rb.html +242 -0
  41. data/lib/doc/files/EFL_regexp_generator_rb.src/M000003.html +27 -0
  42. data/lib/doc/files/EFL_regexp_generator_rb.src/M000004.html +27 -0
  43. data/lib/doc/files/EFL_regexp_generator_rb.src/M000005.html +19 -0
  44. data/lib/doc/files/EFL_regexp_generator_rb.src/M000006.html +20 -0
  45. data/lib/doc/files/EFL_regexp_generator_rb.src/M000007.html +19 -0
  46. data/lib/doc/files/EFL_regexp_rb.html +139 -0
  47. data/lib/doc/files/EFL_syntactic_sugar_rb.html +208 -0
  48. data/lib/doc/files/EFL_syntactic_sugar_rb.src/M000001.html +29 -0
  49. data/lib/doc/files/EFL_syntactic_sugar_rb.src/M000002.html +19 -0
  50. data/lib/doc/fr_class_index.html +28 -0
  51. data/lib/doc/fr_file_index.html +30 -0
  52. data/lib/doc/fr_method_index.html +56 -0
  53. data/lib/doc/index.html +24 -0
  54. data/tests/Add_Sup_1.rb +223 -0
  55. data/tests/Add_Sup_1.rb.bak +223 -0
  56. data/tests/Add_Sup_1_NI.rb +25 -0
  57. data/tests/Add_Sup_2.rb +142 -0
  58. data/tests/Add_Sup_2.rb.bak +140 -0
  59. data/tests/All.rb +2 -0
  60. data/tests/All_1.rb +7 -0
  61. data/tests/All_2.rb +7 -0
  62. data/tests/All_2.rb.bak +5 -0
  63. data/tests/BeforeAfter.rb +83 -0
  64. data/tests/Bloques.rb +34 -0
  65. data/tests/Bloques.rb.bak +34 -0
  66. data/tests/Complementary.rb +144 -0
  67. data/tests/ComplementaryZoom.rb +78 -0
  68. data/tests/Del.rb +126 -0
  69. data/tests/Dup.rb +55 -0
  70. data/tests/Dup.rb.bak +54 -0
  71. data/tests/Error.rb +11 -0
  72. data/tests/ErrorArgClass.rb +169 -0
  73. data/tests/ErrorArgClass.rb.bak +158 -0
  74. data/tests/ErrorCollision.rb +218 -0
  75. data/tests/ErrorCollision.rb.bak +219 -0
  76. data/tests/ErrorWithoutDeclaration.rb +60 -0
  77. data/tests/ErrorWithoutDeclaration.rb.bak +60 -0
  78. data/tests/Extract.rb +56 -0
  79. data/tests/ExtractDollar.rb +17 -0
  80. data/tests/HashTest.rb +54 -0
  81. data/tests/HashTest.rb.bak +54 -0
  82. data/tests/Lista Czarnecki/AntiguaInterfaz/List.cpp +75 -0
  83. data/tests/Lista Czarnecki/AntiguaInterfaz/ListTransformer.rb +69 -0
  84. data/tests/Lista Czarnecki/AntiguaInterfaz/ListTransformer.rb.bak +100 -0
  85. data/tests/Lista Czarnecki/AntiguaInterfaz/ejecutame.bat +1 -0
  86. data/tests/Lista Czarnecki/AntiguaInterfaz/outDir/MyClassList.cpp +75 -0
  87. data/tests/Lista Czarnecki/AntiguaInterfaz/runme.bat +1 -0
  88. data/tests/Lista Czarnecki/AntiguaInterfaz/specification1.txt +5 -0
  89. data/tests/Lista Czarnecki/AntiguaInterfaz/specification2.txt +3 -0
  90. data/tests/Lista Czarnecki/AntiguaInterfaz/specification3.txt +5 -0
  91. data/tests/Lista Czarnecki/NuevaInterfaz/List.cpp +75 -0
  92. data/tests/Lista Czarnecki/NuevaInterfaz/ListTransformer.rb +58 -0
  93. data/tests/Lista Czarnecki/NuevaInterfaz/ListTransformer.rb.bak +57 -0
  94. data/tests/Lista Czarnecki/NuevaInterfaz/ejecutame.bat +1 -0
  95. data/tests/Lista Czarnecki/NuevaInterfaz/outDir/MyClassList.cpp +75 -0
  96. data/tests/Lista Czarnecki/NuevaInterfaz/outDir/NewClassList.cpp +75 -0
  97. data/tests/Lista Czarnecki/NuevaInterfaz/specification1.txt +5 -0
  98. data/tests/Lista Czarnecki/NuevaInterfaz/specification1.txt.bak +5 -0
  99. data/tests/Lista Czarnecki/NuevaInterfaz/specification2.txt +3 -0
  100. data/tests/Lista Czarnecki/NuevaInterfaz/specification3.txt +5 -0
  101. data/tests/Minus.rb +89 -0
  102. data/tests/Plus.rb.bak +48 -0
  103. data/tests/REVit.rb +84 -0
  104. data/tests/RenameTest.rb +46 -0
  105. data/tests/RenameTest.rb.bak +46 -0
  106. data/tests/SubCrash.rb +26 -0
  107. data/tests/SubList.rb.bak +43 -0
  108. data/tests/archAuxiliares/1.txt +328 -0
  109. data/tests/archAuxiliares/2.txt +328 -0
  110. data/tests/archAuxiliares/Bloques/s1.txt +328 -0
  111. data/tests/archAuxiliares/Copia de Matriz.java +19 -0
  112. data/tests/archAuxiliares/Gen/Tesis_156_1.lgi +10 -0
  113. data/tests/archAuxiliares/Gen/Tesis_156_2.lgi +10 -0
  114. data/tests/archAuxiliares/Gen/t01.txt +328 -0
  115. data/tests/archAuxiliares/Gen/t01.txt.bak +328 -0
  116. data/tests/archAuxiliares/Gen/t02.txt +328 -0
  117. data/tests/archAuxiliares/Gen/t02.txt.bak +328 -0
  118. data/tests/archAuxiliares/Gen/t03.txt +328 -0
  119. data/tests/archAuxiliares/Gen/t03.txt.bak +328 -0
  120. data/tests/archAuxiliares/Gen/t04.txt +328 -0
  121. data/tests/archAuxiliares/Gen/t04.txt.bak +328 -0
  122. data/tests/archAuxiliares/Gen/t1.txt +328 -0
  123. data/tests/archAuxiliares/Gen/t1.txt.bak +328 -0
  124. data/tests/archAuxiliares/Gen/t2.txt +328 -0
  125. data/tests/archAuxiliares/Gen/t2.txt.bak +328 -0
  126. data/tests/archAuxiliares/Gen/t5.txt +328 -0
  127. data/tests/archAuxiliares/Gen/t9.txt +328 -0
  128. data/tests/archAuxiliares/Gen/t9.txt.bak +328 -0
  129. data/tests/archAuxiliares/GenTesis_156_1.lgi +10 -0
  130. data/tests/archAuxiliares/Matriz.java +74 -0
  131. data/tests/archAuxiliares/MatrizOut.java +74 -0
  132. data/tests/archAuxiliares/MatrizOut10.java +68 -0
  133. data/tests/archAuxiliares/MatrizOut11.java +86 -0
  134. data/tests/archAuxiliares/MatrizOut2.java +74 -0
  135. data/tests/archAuxiliares/MatrizOut3.java +74 -0
  136. data/tests/archAuxiliares/MatrizOut4.java +74 -0
  137. data/tests/archAuxiliares/MatrizOut5.java +21 -0
  138. data/tests/archAuxiliares/MatrizOut6.java +21 -0
  139. data/tests/archAuxiliares/MatrizOut7.java +21 -0
  140. data/tests/archAuxiliares/MatrizOut8.java +16 -0
  141. data/tests/archAuxiliares/MatrizOut9.java +86 -0
  142. data/tests/archAuxiliares/MatrizOut_9.java +86 -0
  143. data/tests/archAuxiliares/Matriz_1.java +74 -0
  144. data/tests/archAuxiliares/Matriz_10.java +68 -0
  145. data/tests/archAuxiliares/Matriz_11.java +86 -0
  146. data/tests/archAuxiliares/Matriz_2.java +74 -0
  147. data/tests/archAuxiliares/Matriz_3.java +74 -0
  148. data/tests/archAuxiliares/Matriz_4.java +74 -0
  149. data/tests/archAuxiliares/Matriz_5.java +21 -0
  150. data/tests/archAuxiliares/Matriz_6.java +21 -0
  151. data/tests/archAuxiliares/Matriz_7.java +21 -0
  152. data/tests/archAuxiliares/Matriz_8.java +16 -0
  153. data/tests/archAuxiliares/Matriz_9.java +86 -0
  154. data/tests/archAuxiliares/Matriz_N_1.java +21 -0
  155. data/tests/archAuxiliares/Matriz_N_2.java +91 -0
  156. data/tests/archAuxiliares/N1.txt +18 -0
  157. data/tests/archAuxiliares/N1_EXPECTED.txt +18 -0
  158. data/tests/archAuxiliares/N1_OUT.txt +18 -0
  159. data/tests/archAuxiliares/N2_EXPECTED.txt +18 -0
  160. data/tests/archAuxiliares/N2_OUT.txt +18 -0
  161. data/tests/archAuxiliares/N3.txt +23 -0
  162. data/tests/archAuxiliares/N3_EXPECTED.txt +22 -0
  163. data/tests/archAuxiliares/N3_OUT.txt +22 -0
  164. data/tests/archAuxiliares/N4_EXPECTED.txt +10 -0
  165. data/tests/archAuxiliares/N4_OUT.txt +10 -0
  166. data/tests/archAuxiliares/N5_OUT.txt +18 -0
  167. data/tests/archAuxiliares/N6_OUT.txt +18 -0
  168. data/tests/archAuxiliares/PedidorTerceroWS.jsp +142 -0
  169. data/tests/archAuxiliares/Tesis_156.lgi +7 -0
  170. data/tests/archAuxiliares/aspectgen.rb +328 -0
  171. data/tests/archAuxiliares/aspectgenCopy.rb +328 -0
  172. data/tests/archAuxiliares/extract_dollar.txt +1 -0
  173. data/tests/archAuxiliares/minus.txt +26 -0
  174. data/tests/archAuxiliares/minus_expected_1.txt +26 -0
  175. data/tests/archAuxiliares/minus_expected_2.txt +26 -0
  176. data/tests/archAuxiliares/minus_out_1.txt +26 -0
  177. data/tests/archAuxiliares/minus_out_2.txt +26 -0
  178. data/tests/archAuxiliares/p1.txt +328 -0
  179. data/tests/archAuxiliares/p2.txt +328 -0
  180. data/tests/archAuxiliares/s1.txt +328 -0
  181. data/tests/archAuxiliares/s2.txt +328 -0
  182. data/tests/archAuxiliares/s3.txt +328 -0
  183. data/tests/archAuxiliares/s4.txt +328 -0
  184. data/tests/archAuxiliares/s5.txt +328 -0
  185. data/tests/archAuxiliares/s7.txt +328 -0
  186. data/tests/archAuxiliares/s8.txt +328 -0
  187. data/tests/archAuxiliares/s9.txt +328 -0
  188. data/tests/archAuxiliares/text.txt +1 -0
  189. data/tests/delay.rb +33 -0
  190. data/tests/delay.rb.bak +33 -0
  191. data/tests/satisfy.rb +44 -0
  192. data/tests/satisfy.rb.bak +34 -0
  193. metadata +252 -0
@@ -0,0 +1,67 @@
1
+ # <em>Copyright � 2007 by Ruben Heradio Gil, Jose Antonio Cerrada Somolinos, Jose Ramon Coz Fernandez and Jose Carlos Lopez Ruiz.</em>
2
+ # <em>This file is part of <b>EFL-A Ruby implementation of the Exemplar Flexibilization Language.</b></em>
3
+ # <em>EFL is distributed under the terms of the GNU Lesser General Public License (LGPL).</em>
4
+ # <em>EFL is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</em>
5
+ # <em>EFL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</em>
6
+ # <em>You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.</em>
7
+ # <em>Contact Information: Ruben Heradio Gil (rheradio@issi.uned.es). Phone number: 00 34 91 398 8242, Postal address: Dpto. de Ingenier�a de SW y Sistemas Inform�ticos. E.T.S.I. Inform�tica, UNED. C/ Juan del Rosal, 16. 28040 Madrid.</em>
8
+ #
9
+ # = Syntactic sugar for writing generators and regular expressions
10
+
11
+ # Syntactic sugar for writing generators.
12
+ # For simple generators, instead of writing:
13
+ #
14
+ # <tt>class SimpleGen < Generator</tt>
15
+ # def initialize
16
+ # substitutions
17
+ # productions
18
+ # end
19
+ # auxiliar_methods
20
+ # <tt>end</tt>
21
+ #
22
+ # <tt>SimpleGen.new</tt>
23
+ #
24
+ # you can write:
25
+ #
26
+ # <tt>simple_gen = generator {</tt>
27
+ # substitutions
28
+ # productions
29
+ # auxiliar_methods
30
+ # <tt>}</tt>
31
+
32
+ def generator(args=nil, &block)
33
+ g = Generator.new
34
+ if args
35
+ args_code = ''
36
+ args.each { |key, value|
37
+ value = "'#{value}'" if value.kind_of? String
38
+ code = <<END_OF_CODE
39
+ def g.#{key}
40
+ @#{key}
41
+ end
42
+
43
+ def g.#{key}=(val)
44
+ @#{key} = val
45
+ end
46
+
47
+ g.#{key} = #{value}
48
+ END_OF_CODE
49
+ args_code += code
50
+ }
51
+ eval(args_code)
52
+ end
53
+ g.instance_eval(&block) if block
54
+ return g
55
+ end # Syntactic sugar for writing generators
56
+
57
+
58
+ # Syntactic sugar for the regular expressions complement operator Regexp#o.
59
+ # Instead of writing:
60
+ # <tt>regular_expression.o</tt>
61
+ # you can write:
62
+ # <tt>o(regular_expression)</tt>
63
+
64
+ def o(regular_expression)
65
+ result = regular_expression.dup
66
+ return result.o
67
+ end # Syntactic sugar for the regular expressions complement
Binary file
@@ -0,0 +1,3 @@
1
+ LIMITACIONES:
2
+
3
+ los $1...$9 no funcionan en before y after
@@ -0,0 +1,634 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Generator</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Generator</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/EFL_rb.html">
59
+ EFL.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+ <div id="description">
82
+ <ul>
83
+ <li>Generators are specified using substititions (with the <em><a
84
+ href="Generator.html#M000008">sub</a></em> and <em><a
85
+ href="Generator.html#M000012">gsub</a></em> methods), productions (with the
86
+ <em><a href="Generator.html#M000016">prod</a></em> method) and generations
87
+ (with the <em><a href="Generator.html#M000018">gen</a></em> method).
88
+
89
+ </li>
90
+ <li>Generators can be combined in a sequential orden or mixed using the <a
91
+ href="Generator.html#M000023">add</a> (with the + and <em><a
92
+ href="Generator.html#M000023">add</a></em> methods) and the superposition
93
+ (with the &lt;&lt; and <em><a href="Generator.html#M000026">sup!</a></em>
94
+ methods).
95
+
96
+ </li>
97
+ </ul>
98
+
99
+ </div>
100
+
101
+
102
+ </div>
103
+
104
+ <div id="method-list">
105
+ <h3 class="section-bar">Methods</h3>
106
+
107
+ <div class="name-list">
108
+ <a href="#M000022">+</a>&nbsp;&nbsp;
109
+ <a href="#M000025">&lt;&lt;</a>&nbsp;&nbsp;
110
+ <a href="#M000023">add</a>&nbsp;&nbsp;
111
+ <a href="#M000024">add?</a>&nbsp;&nbsp;
112
+ <a href="#M000011">after</a>&nbsp;&nbsp;
113
+ <a href="#M000010">before</a>&nbsp;&nbsp;
114
+ <a href="#M000009">del</a>&nbsp;&nbsp;
115
+ <a href="#M000020">extract</a>&nbsp;&nbsp;
116
+ <a href="#M000021">extract_dollar</a>&nbsp;&nbsp;
117
+ <a href="#M000015">gafter</a>&nbsp;&nbsp;
118
+ <a href="#M000014">gbefore</a>&nbsp;&nbsp;
119
+ <a href="#M000013">gdel</a>&nbsp;&nbsp;
120
+ <a href="#M000018">gen</a>&nbsp;&nbsp;
121
+ <a href="#M000019">gen?</a>&nbsp;&nbsp;
122
+ <a href="#M000012">gsub</a>&nbsp;&nbsp;
123
+ <a href="#M000016">prod</a>&nbsp;&nbsp;
124
+ <a href="#M000017">prod?</a>&nbsp;&nbsp;
125
+ <a href="#M000008">sub</a>&nbsp;&nbsp;
126
+ <a href="#M000026">sup!</a>&nbsp;&nbsp;
127
+ <a href="#M000027">sup?</a>&nbsp;&nbsp;
128
+ </div>
129
+ </div>
130
+
131
+ </div>
132
+
133
+
134
+ <!-- if includes -->
135
+
136
+ <div id="section">
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ <!-- if method_list -->
146
+ <div id="methods">
147
+ <h3 class="section-bar">Public Instance methods</h3>
148
+
149
+ <div id="method-M000022" class="method-detail">
150
+ <a name="M000022"></a>
151
+
152
+ <div class="method-heading">
153
+ <a href="Generator.src/M000022.html" target="Code" class="method-signature"
154
+ onclick="popupCode('Generator.src/M000022.html');return false;">
155
+ <span class="method-name">+</span><span class="method-args">(generator)</span>
156
+ </a>
157
+ </div>
158
+
159
+ <div class="method-description">
160
+ <p>
161
+ Adds <tt>self</tt> and <tt>generator</tt>. Returns a new <a
162
+ href="Generator.html">Generator</a> which substitutions and productions are
163
+ the union of the substitutions and the productions of <tt>self</tt> and
164
+ <tt>generator</tt>. Collisions between the substitutions of <tt>self</tt>
165
+ and <tt>generator</tt> will be detected automatically calling the method
166
+ <tt><a href="Generator.html#M000024">add?</a></tt> (internally, + calls
167
+ <tt><a href="Generator.html#M000024">add?</a></tt>)
168
+ </p>
169
+ </div>
170
+ </div>
171
+
172
+ <div id="method-M000025" class="method-detail">
173
+ <a name="M000025"></a>
174
+
175
+ <div class="method-heading">
176
+ <a href="Generator.src/M000025.html" target="Code" class="method-signature"
177
+ onclick="popupCode('Generator.src/M000025.html');return false;">
178
+ <span class="method-name">&lt;&lt;</span><span class="method-args">(generator)</span>
179
+ </a>
180
+ </div>
181
+
182
+ <div class="method-description">
183
+ <p>
184
+ Superpose <tt>generator</tt> to <tt>self</tt>. &lt;&lt; actualizes the
185
+ substitutions and productions of <tt>self</tt> with the substitutions and
186
+ productions of <tt>generator</tt>. The substitutions and productions of
187
+ <tt>generator</tt> with a common name in <tt>self</tt> are overwritten in
188
+ <tt>self</tt>. The others are added to <tt>self</tt>. Collisions between
189
+ the substitutions of <tt>self</tt> and <tt>generator</tt> will be detected
190
+ automatically calling the method <tt>sup</tt> (internally, &lt;&lt; calls
191
+ <tt><a href="Generator.html#M000027">sup?</a></tt>)
192
+ </p>
193
+ </div>
194
+ </div>
195
+
196
+ <div id="method-M000023" class="method-detail">
197
+ <a name="M000023"></a>
198
+
199
+ <div class="method-heading">
200
+ <a href="Generator.src/M000023.html" target="Code" class="method-signature"
201
+ onclick="popupCode('Generator.src/M000023.html');return false;">
202
+ <span class="method-name">add</span><span class="method-args">(generator)</span>
203
+ </a>
204
+ </div>
205
+
206
+ <div class="method-description">
207
+ <p>
208
+ Prefix notation for +
209
+ </p>
210
+ </div>
211
+ </div>
212
+
213
+ <div id="method-M000024" class="method-detail">
214
+ <a name="M000024"></a>
215
+
216
+ <div class="method-heading">
217
+ <a href="Generator.src/M000024.html" target="Code" class="method-signature"
218
+ onclick="popupCode('Generator.src/M000024.html');return false;">
219
+ <span class="method-name">add?</span><span class="method-args">(generator)</span>
220
+ </a>
221
+ </div>
222
+
223
+ <div class="method-description">
224
+ <p>
225
+ Returns if it is possible to <a href="Generator.html#M000023">add</a>
226
+ <tt>self</tt> and <tt>generator</tt> (see + and <tt><a
227
+ href="Generator.html#M000023">add</a></tt>)
228
+ </p>
229
+ </div>
230
+ </div>
231
+
232
+ <div id="method-M000011" class="method-detail">
233
+ <a name="M000011"></a>
234
+
235
+ <div class="method-heading">
236
+ <a href="Generator.src/M000011.html" target="Code" class="method-signature"
237
+ onclick="popupCode('Generator.src/M000011.html');return false;">
238
+ <span class="method-name">after</span><span class="method-args">(reg_exp, text, name = nil)</span>
239
+ </a>
240
+ </div>
241
+
242
+ <div class="method-description">
243
+ <p>
244
+ Specifies a kind of substitution that inserts the <tt>text</tt> string <a
245
+ href="Generator.html#M000011">after</a> the first occurrence of the pattern
246
+ expressed by the <tt>reg_exp</tt> regular expression. Optionally, this
247
+ substitution can be named using the <tt>name</tt> string. To express
248
+ complex &#8216;<a href="Generator.html#M000011">after</a> inserts&#8217;,
249
+ the regular expressions can be combined using the zoom operator (<a
250
+ href="Regexp.html">Regexp</a>#&gt;).
251
+ </p>
252
+ </div>
253
+ </div>
254
+
255
+ <div id="method-M000010" class="method-detail">
256
+ <a name="M000010"></a>
257
+
258
+ <div class="method-heading">
259
+ <a href="Generator.src/M000010.html" target="Code" class="method-signature"
260
+ onclick="popupCode('Generator.src/M000010.html');return false;">
261
+ <span class="method-name">before</span><span class="method-args">(reg_exp, text, name = nil)</span>
262
+ </a>
263
+ </div>
264
+
265
+ <div class="method-description">
266
+ <p>
267
+ Specifies a kind of substitution that inserts the <tt>text</tt> string <a
268
+ href="Generator.html#M000010">before</a> the first occurrence of the
269
+ pattern expressed by the <tt>reg_exp</tt> regular expression. Optionally,
270
+ this substitution can be named using the <tt>name</tt> string. To express
271
+ complex &#8216;<a href="Generator.html#M000010">before</a> inserts&#8217;,
272
+ the regular expressions can be combined using the zoom operator (<a
273
+ href="Regexp.html">Regexp</a>#&gt;).
274
+ </p>
275
+ </div>
276
+ </div>
277
+
278
+ <div id="method-M000009" class="method-detail">
279
+ <a name="M000009"></a>
280
+
281
+ <div class="method-heading">
282
+ <a href="Generator.src/M000009.html" target="Code" class="method-signature"
283
+ onclick="popupCode('Generator.src/M000009.html');return false;">
284
+ <span class="method-name">del</span><span class="method-args">(reg_exp, name = nil)</span>
285
+ </a>
286
+ </div>
287
+
288
+ <div class="method-description">
289
+ <p>
290
+ Specifies a kind of substitution that deletes the first occurrence of the
291
+ pattern expressed by the <tt>reg_exp</tt> regular expression. Optionally,
292
+ this substitution can be named using the <tt>name</tt> string. To express
293
+ complex deletes, the regular expressions can be combined using the zoom
294
+ operator (<a href="Regexp.html">Regexp</a>#&gt;).
295
+ </p>
296
+ </div>
297
+ </div>
298
+
299
+ <div id="method-M000020" class="method-detail">
300
+ <a name="M000020"></a>
301
+
302
+ <div class="method-heading">
303
+ <a href="Generator.src/M000020.html" target="Code" class="method-signature"
304
+ onclick="popupCode('Generator.src/M000020.html');return false;">
305
+ <span class="method-name">extract</span><span class="method-args">(file, reg_exp)</span>
306
+ </a>
307
+ </div>
308
+
309
+ <div class="method-description">
310
+ <p>
311
+ Returns an array of the strings resulted on matching the <tt>reg_exp</tt>
312
+ regular expression on the input file <tt>file</tt>
313
+ </p>
314
+ </div>
315
+ </div>
316
+
317
+ <div id="method-M000021" class="method-detail">
318
+ <a name="M000021"></a>
319
+
320
+ <div class="method-heading">
321
+ <a href="Generator.src/M000021.html" target="Code" class="method-signature"
322
+ onclick="popupCode('Generator.src/M000021.html');return false;">
323
+ <span class="method-name">extract_dollar</span><span class="method-args">(file, reg_exp, number)</span>
324
+ </a>
325
+ </div>
326
+
327
+ <div class="method-description">
328
+ <p>
329
+ Returns an array of the strings grouped by the parenthesis <tt>number</tt>
330
+ when the <tt>reg_exp</tt> regular expression is matched on the input
331
+ <tt>file</tt>.
332
+ </p>
333
+ <p>
334
+ For example. if the content of <tt>myfile.txt</tt> is:
335
+ </p>
336
+ <p>
337
+ <tt>This is my code</tt>
338
+ </p>
339
+ <p>
340
+ The result of execute:
341
+ </p>
342
+ <p>
343
+ <tt>g = generator</tt>
344
+ </p>
345
+ <p>
346
+ <tt>puts &quot;$1 = &quot; + g.extract_dollar(&#8216;myfile.txt&#8217;,
347
+ /(This).*?(code).*?/, 1).to_s</tt>
348
+ </p>
349
+ <p>
350
+ <tt>puts &quot;$2 = &quot; + g.extract_dollar(&#8216;myfile.txt&#8217;,
351
+ /(This).*?(code).*?/, 2).to_s</tt>
352
+ </p>
353
+ <p>
354
+ would be
355
+ </p>
356
+ <p>
357
+ <tt>$1 = This</tt>
358
+ </p>
359
+ <p>
360
+ <tt>$2 = code</tt>
361
+ </p>
362
+ </div>
363
+ </div>
364
+
365
+ <div id="method-M000015" class="method-detail">
366
+ <a name="M000015"></a>
367
+
368
+ <div class="method-heading">
369
+ <a href="Generator.src/M000015.html" target="Code" class="method-signature"
370
+ onclick="popupCode('Generator.src/M000015.html');return false;">
371
+ <span class="method-name">gafter</span><span class="method-args">(reg_exp, text, name = nil)</span>
372
+ </a>
373
+ </div>
374
+
375
+ <div class="method-description">
376
+ <p>
377
+ Specifies a kind of substitution that inserts the <tt>text</tt> string <a
378
+ href="Generator.html#M000011">after</a> all the occurrences of the pattern
379
+ expressed by the <tt>reg_exp</tt> regular expression. Optionally, this
380
+ substitution can be named using the <tt>name</tt> string. To express
381
+ complex &#8216;global <a href="Generator.html#M000011">after</a>
382
+ inserts&#8217;, the regular expressions can be combined using the zoom
383
+ operator (<a href="Regexp.html">Regexp</a>#&gt;).def <a
384
+ href="Generator.html#M000014">gbefore</a>(reg_exp, text, name = nil)
385
+ </p>
386
+ </div>
387
+ </div>
388
+
389
+ <div id="method-M000014" class="method-detail">
390
+ <a name="M000014"></a>
391
+
392
+ <div class="method-heading">
393
+ <a href="Generator.src/M000014.html" target="Code" class="method-signature"
394
+ onclick="popupCode('Generator.src/M000014.html');return false;">
395
+ <span class="method-name">gbefore</span><span class="method-args">(reg_exp, text, name = nil)</span>
396
+ </a>
397
+ </div>
398
+
399
+ <div class="method-description">
400
+ <p>
401
+ Specifies a kind of substitution that inserts the <tt>text</tt> string <a
402
+ href="Generator.html#M000010">before</a> all the occurrences of the pattern
403
+ expressed by the <tt>reg_exp</tt> regular expression. Optionally, this
404
+ substitution can be named using the <tt>name</tt> string. To express
405
+ complex &#8216;global <a href="Generator.html#M000010">before</a>
406
+ inserts&#8217;, the regular expressions can be combined using the zoom
407
+ operator (<a href="Regexp.html">Regexp</a>#&gt;).def <a
408
+ href="Generator.html#M000014">gbefore</a>(reg_exp, text, name = nil)
409
+ </p>
410
+ </div>
411
+ </div>
412
+
413
+ <div id="method-M000013" class="method-detail">
414
+ <a name="M000013"></a>
415
+
416
+ <div class="method-heading">
417
+ <a href="Generator.src/M000013.html" target="Code" class="method-signature"
418
+ onclick="popupCode('Generator.src/M000013.html');return false;">
419
+ <span class="method-name">gdel</span><span class="method-args">(reg_exp, name = nil)</span>
420
+ </a>
421
+ </div>
422
+
423
+ <div class="method-description">
424
+ <p>
425
+ Specifies a kind of substitution that deletes all the occurrence of the
426
+ pattern expressed by the <tt>reg_exp</tt> regular expression. Optionally,
427
+ this substitution can be named using the <tt>name</tt> string. To express
428
+ complex deletes, the regular expressions can be combined using the zoom
429
+ operator (<a href="Regexp.html">Regexp</a>#&gt;).
430
+ </p>
431
+ </div>
432
+ </div>
433
+
434
+ <div id="method-M000018" class="method-detail">
435
+ <a name="M000018"></a>
436
+
437
+ <div class="method-heading">
438
+ <a href="Generator.src/M000018.html" target="Code" class="method-signature"
439
+ onclick="popupCode('Generator.src/M000018.html');return false;">
440
+ <span class="method-name">gen</span><span class="method-args">(prod_list = nil)</span>
441
+ </a>
442
+ </div>
443
+
444
+ <div class="method-description">
445
+ <p>
446
+ Specifies the execution of the set of productions <tt>prod_list</tt>.
447
+ </p>
448
+ <ul>
449
+ <li>If <tt>prod_list</tt> is not specified, it will contain implicitly all the
450
+ productions defined <a href="Generator.html#M000010">before</a> the current
451
+ generation.
452
+
453
+ </li>
454
+ <li>The order of the productions in <tt>prod_list</tt> is irrelevant.
455
+
456
+ </li>
457
+ <li>It is posible that several substitutions included in the productions of
458
+ <tt>sub_list</tt> try to make different changes over the same area of the
459
+ exemplar. This kind of collisions will be detected automatically calling
460
+ the method <tt><a href="Generator.html#M000019">gen?</a></tt> (internally,
461
+ <tt><a href="Generator.html#M000018">gen</a></tt> calls <tt><a
462
+ href="Generator.html#M000019">gen?</a></tt>).
463
+
464
+ </li>
465
+ </ul>
466
+ </div>
467
+ </div>
468
+
469
+ <div id="method-M000019" class="method-detail">
470
+ <a name="M000019"></a>
471
+
472
+ <div class="method-heading">
473
+ <a href="Generator.src/M000019.html" target="Code" class="method-signature"
474
+ onclick="popupCode('Generator.src/M000019.html');return false;">
475
+ <span class="method-name">gen?</span><span class="method-args">(prod_list = nil)</span>
476
+ </a>
477
+ </div>
478
+
479
+ <div class="method-description">
480
+ <p>
481
+ Returns if it is possible to execute a generation (see <tt><a
482
+ href="Generator.html#M000018">gen</a></tt>)
483
+ </p>
484
+ </div>
485
+ </div>
486
+
487
+ <div id="method-M000012" class="method-detail">
488
+ <a name="M000012"></a>
489
+
490
+ <div class="method-heading">
491
+ <a href="Generator.src/M000012.html" target="Code" class="method-signature"
492
+ onclick="popupCode('Generator.src/M000012.html');return false;">
493
+ <span class="method-name">gsub</span><span class="method-args">(reg_exp, text, name = nil)</span>
494
+ </a>
495
+ </div>
496
+
497
+ <div class="method-description">
498
+ <p>
499
+ Specifies the change of all the occurrences of the pattern expressed by the
500
+ <tt>reg_exp</tt> regular expression to the <tt>text</tt> string.
501
+ Optionally, a substitution can be named using the <tt>name</tt> string. To
502
+ build complex substitution patterns, the regular expressions can be
503
+ combined using the zoom operator (<a href="Regexp.html">Regexp</a>#&gt;).
504
+ </p>
505
+ </div>
506
+ </div>
507
+
508
+ <div id="method-M000016" class="method-detail">
509
+ <a name="M000016"></a>
510
+
511
+ <div class="method-heading">
512
+ <a href="Generator.src/M000016.html" target="Code" class="method-signature"
513
+ onclick="popupCode('Generator.src/M000016.html');return false;">
514
+ <span class="method-name">prod</span><span class="method-args">(i_file, o_file, sub_list = nil, name = nil)</span>
515
+ </a>
516
+ </div>
517
+
518
+ <div class="method-description">
519
+ <p>
520
+ Specifies the application of a set of substitutions (<tt>sub_list</tt>) on
521
+ an input file (<tt>i_file</tt>) to produce an output file
522
+ (<tt>o_file</tt>).
523
+ </p>
524
+ <ul>
525
+ <li>Optionally, a production can be named using the <tt>name</tt> string.
526
+
527
+ </li>
528
+ <li>If <tt>sub_list</tt> is not specified, it will contain implicitly all the
529
+ substitutions defined <a href="Generator.html#M000010">before</a> the
530
+ current production.
531
+
532
+ </li>
533
+ <li>The order of the substitutions in <tt>sub_list</tt> is irrelevant.
534
+
535
+ </li>
536
+ <li>It is posible that several substitutions of <tt>sub_list</tt> try to make
537
+ different changes over the same area of the exemplar. This kind of
538
+ collisions will be detected automatically calling the method <tt><a
539
+ href="Generator.html#M000017">prod?</a></tt> (internally, <tt><a
540
+ href="Generator.html#M000016">prod</a></tt> calls <tt><a
541
+ href="Generator.html#M000017">prod?</a></tt>).
542
+
543
+ </li>
544
+ </ul>
545
+ </div>
546
+ </div>
547
+
548
+ <div id="method-M000017" class="method-detail">
549
+ <a name="M000017"></a>
550
+
551
+ <div class="method-heading">
552
+ <a href="Generator.src/M000017.html" target="Code" class="method-signature"
553
+ onclick="popupCode('Generator.src/M000017.html');return false;">
554
+ <span class="method-name">prod?</span><span class="method-args">(i_file, o_file, sub_list = nil)</span>
555
+ </a>
556
+ </div>
557
+
558
+ <div class="method-description">
559
+ <p>
560
+ Returns if it is possible to execute a production (see <tt><a
561
+ href="Generator.html#M000016">prod</a></tt>)
562
+ </p>
563
+ </div>
564
+ </div>
565
+
566
+ <div id="method-M000008" class="method-detail">
567
+ <a name="M000008"></a>
568
+
569
+ <div class="method-heading">
570
+ <a href="Generator.src/M000008.html" target="Code" class="method-signature"
571
+ onclick="popupCode('Generator.src/M000008.html');return false;">
572
+ <span class="method-name">sub</span><span class="method-args">(reg_exp, text, name = nil)</span>
573
+ </a>
574
+ </div>
575
+
576
+ <div class="method-description">
577
+ <p>
578
+ Specifies the change of the first occurrence of the pattern expressed by
579
+ the <tt>reg_exp</tt> regular expression to the <tt>text</tt> string.
580
+ Optionally, a substitution can be named using the <tt>name</tt> string. To
581
+ build complex substitution patterns, the regular expressions can be
582
+ combined using the zoom operator (<a href="Regexp.html">Regexp</a>#&gt;).
583
+ </p>
584
+ </div>
585
+ </div>
586
+
587
+ <div id="method-M000026" class="method-detail">
588
+ <a name="M000026"></a>
589
+
590
+ <div class="method-heading">
591
+ <a href="Generator.src/M000026.html" target="Code" class="method-signature"
592
+ onclick="popupCode('Generator.src/M000026.html');return false;">
593
+ <span class="method-name">sup!</span><span class="method-args">(generator)</span>
594
+ </a>
595
+ </div>
596
+
597
+ <div class="method-description">
598
+ <p>
599
+ Prefix notation for &lt;&lt;
600
+ </p>
601
+ </div>
602
+ </div>
603
+
604
+ <div id="method-M000027" class="method-detail">
605
+ <a name="M000027"></a>
606
+
607
+ <div class="method-heading">
608
+ <a href="Generator.src/M000027.html" target="Code" class="method-signature"
609
+ onclick="popupCode('Generator.src/M000027.html');return false;">
610
+ <span class="method-name">sup?</span><span class="method-args">(generator)</span>
611
+ </a>
612
+ </div>
613
+
614
+ <div class="method-description">
615
+ <p>
616
+ Returns if it is possible to superpose <tt>self</tt> to <tt>generator</tt>
617
+ (see &lt;&lt; and <tt><a href="Generator.html#M000026">sup!</a></tt>)
618
+ </p>
619
+ </div>
620
+ </div>
621
+
622
+
623
+ </div>
624
+
625
+
626
+ </div>
627
+
628
+
629
+ <div id="validator-badges">
630
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
631
+ </div>
632
+
633
+ </body>
634
+ </html>