EFL 1.0

Sign up to get free protection for your applications and to get access to all the features.
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>