esi_attribute_language 0.0.3
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/Rakefile +36 -0
- data/VERSION +1 -0
- data/lib/esi_attribute_language.rb +94 -0
- data/lib/esi_attribute_language/grammar.rb +56 -0
- data/lib/esi_attribute_language/grammar/grammar.rex +33 -0
- data/lib/esi_attribute_language/grammar/grammar.rex.rb +154 -0
- data/lib/esi_attribute_language/grammar/grammar.y +39 -0
- data/lib/esi_attribute_language/grammar/grammar.y.rb +398 -0
- data/lib/esi_attribute_language/grammar/lexer.rb +121 -0
- data/lib/esi_attribute_language/grammar/parser.rb +148 -0
- data/lib/esi_attribute_language/grammar/simple.rex +13 -0
- data/lib/esi_attribute_language/grammar/simple.rex.rb +94 -0
- data/lib/esi_attribute_language/grammar/simple.y +19 -0
- data/lib/esi_attribute_language/grammar/simple.y.rb +167 -0
- data/spec/attr_spec.rb +106 -0
- data/spec/simple_spec.rb +34 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +2 -0
- metadata +74 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
#--
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by rex 1.0.3
|
4
|
+
# from lexical definition file "lib/esi_attribute_lang/grammar/lexer.rex".
|
5
|
+
#++
|
6
|
+
|
7
|
+
module EsiAttributeLanguageibute
|
8
|
+
class Parser
|
9
|
+
require 'strscan'
|
10
|
+
|
11
|
+
class ScanError < StandardError ; end
|
12
|
+
|
13
|
+
attr_reader :lineno
|
14
|
+
attr_reader :filename
|
15
|
+
|
16
|
+
def scan_setup ; end
|
17
|
+
|
18
|
+
def action &block
|
19
|
+
yield
|
20
|
+
end
|
21
|
+
|
22
|
+
def scan_str( str )
|
23
|
+
scan_evaluate str
|
24
|
+
do_parse
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_file( filename )
|
28
|
+
@filename = filename
|
29
|
+
open(filename, "r") do |f|
|
30
|
+
scan_evaluate f.read
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def scan_file( filename )
|
35
|
+
load_file filename
|
36
|
+
do_parse
|
37
|
+
end
|
38
|
+
|
39
|
+
def next_token
|
40
|
+
@rex_tokens.shift
|
41
|
+
end
|
42
|
+
|
43
|
+
def scan_evaluate( str )
|
44
|
+
scan_setup
|
45
|
+
@rex_tokens = []
|
46
|
+
@lineno = 1
|
47
|
+
ss = StringScanner.new(str)
|
48
|
+
state = nil
|
49
|
+
until ss.eos?
|
50
|
+
text = ss.peek(1)
|
51
|
+
@lineno += 1 if text == "\n"
|
52
|
+
case state
|
53
|
+
when nil
|
54
|
+
case
|
55
|
+
when (text = ss.scan(/\$/))
|
56
|
+
@rex_tokens.push action { [:DOLLAR, text] }
|
57
|
+
|
58
|
+
when (text = ss.scan(/\|/))
|
59
|
+
@rex_tokens.push action { [:PIPE, text] }
|
60
|
+
|
61
|
+
when (text = ss.scan(/\[/))
|
62
|
+
@rex_tokens.push action { [:LSQUARE, text] }
|
63
|
+
|
64
|
+
when (text = ss.scan(/\]/))
|
65
|
+
@rex_tokens.push action { [:RSQUARE, text] }
|
66
|
+
|
67
|
+
when (text = ss.scan(/\{/))
|
68
|
+
@rex_tokens.push action { [:LBRACE, text] }
|
69
|
+
|
70
|
+
when (text = ss.scan(/\}/))
|
71
|
+
@rex_tokens.push action { [:RBRACE, text] }
|
72
|
+
|
73
|
+
when (text = ss.scan(/\(/))
|
74
|
+
@rex_tokens.push action { [:LPAREN, text] }
|
75
|
+
|
76
|
+
when (text = ss.scan(/\)/))
|
77
|
+
@rex_tokens.push action { [:RPAREN, text] }
|
78
|
+
|
79
|
+
when (text = ss.scan(/\\/))
|
80
|
+
@rex_tokens.push action { [:BSLASH, text] }
|
81
|
+
|
82
|
+
when (text = ss.scan(/\+/))
|
83
|
+
@rex_tokens.push action { [:PLUS, text] }
|
84
|
+
|
85
|
+
when (text = ss.scan(/\*/))
|
86
|
+
@rex_tokens.push action { [:STAR, text] }
|
87
|
+
|
88
|
+
when (text = ss.scan(/\?/))
|
89
|
+
@rex_tokens.push action { [:QMARK, text] }
|
90
|
+
|
91
|
+
when (text = ss.scan(/\./))
|
92
|
+
@rex_tokens.push action { [:DOT, text] }
|
93
|
+
|
94
|
+
when (text = ss.scan(/\^/))
|
95
|
+
@rex_tokens.push action { [:CARROT, text] }
|
96
|
+
|
97
|
+
when (text = ss.scan(/-/))
|
98
|
+
@rex_tokens.push action { [:MINUS, text] }
|
99
|
+
|
100
|
+
when (text = ss.scan(/&/))
|
101
|
+
@rex_tokens.push action { [:AMP, text] }
|
102
|
+
|
103
|
+
when (text = ss.scan(/!/))
|
104
|
+
@rex_tokens.push action { [:BANG, text] }
|
105
|
+
|
106
|
+
when (text = ss.scan(/./))
|
107
|
+
@rex_tokens.push action { [:CHAR, text] }
|
108
|
+
|
109
|
+
else
|
110
|
+
text = ss.string[ss.pos .. -1]
|
111
|
+
raise ScanError, "can not match: '" + text + "'"
|
112
|
+
end # if
|
113
|
+
|
114
|
+
else
|
115
|
+
raise ScanError, "undefined state: '" + state.to_s + "'"
|
116
|
+
end # case state
|
117
|
+
end # until ss
|
118
|
+
end # def scan_evaluate
|
119
|
+
|
120
|
+
end # class
|
121
|
+
end # module
|
@@ -0,0 +1,148 @@
|
|
1
|
+
#
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by Racc 1.4.6
|
4
|
+
# from Racc grammer file "".
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'racc/parser.rb'
|
8
|
+
module EsiAttributeLanguageibute
|
9
|
+
class Parser < Racc::Parser
|
10
|
+
##### State transition tables begin ###
|
11
|
+
|
12
|
+
racc_action_table = [
|
13
|
+
7, 7, 8, 10, 7, 5, 5, 11, 9, 5,
|
14
|
+
7, 15, 4, 11, 9, 5, 11, 9, 11, 9,
|
15
|
+
3, 1 ]
|
16
|
+
|
17
|
+
racc_action_check = [
|
18
|
+
7, 9, 4, 6, 11, 7, 9, 6, 6, 11,
|
19
|
+
3, 12, 2, 12, 12, 3, 13, 13, 14, 14,
|
20
|
+
1, 0 ]
|
21
|
+
|
22
|
+
racc_action_pointer = [
|
23
|
+
19, 15, 12, 3, 2, nil, -3, -7, nil, -6,
|
24
|
+
nil, -3, 3, 6, 8, nil ]
|
25
|
+
|
26
|
+
racc_action_default = [
|
27
|
+
-6, -6, -6, -6, -6, -5, -6, -6, 16, -6,
|
28
|
+
-1, -6, -6, -4, -2, -3 ]
|
29
|
+
|
30
|
+
racc_goto_table = [
|
31
|
+
6, 2, nil, nil, 12, nil, 13, nil, 14 ]
|
32
|
+
|
33
|
+
racc_goto_check = [
|
34
|
+
2, 1, nil, nil, 2, nil, 2, nil, 2 ]
|
35
|
+
|
36
|
+
racc_goto_pointer = [
|
37
|
+
nil, 1, -3 ]
|
38
|
+
|
39
|
+
racc_goto_default = [
|
40
|
+
nil, nil, nil ]
|
41
|
+
|
42
|
+
racc_reduce_table = [
|
43
|
+
0, 0, :racc_error,
|
44
|
+
4, 14, :_reduce_none,
|
45
|
+
3, 15, :_reduce_2,
|
46
|
+
3, 15, :_reduce_3,
|
47
|
+
3, 15, :_reduce_4,
|
48
|
+
1, 15, :_reduce_5 ]
|
49
|
+
|
50
|
+
racc_reduce_n = 6
|
51
|
+
|
52
|
+
racc_shift_n = 16
|
53
|
+
|
54
|
+
racc_token_table = {
|
55
|
+
false => 0,
|
56
|
+
:error => 1,
|
57
|
+
:DOLLAR => 2,
|
58
|
+
:LSQUARE => 3,
|
59
|
+
:RSQUARE => 4,
|
60
|
+
:LPAREN => 5,
|
61
|
+
:RPAREN => 6,
|
62
|
+
:LBRACE => 7,
|
63
|
+
:RBRACE => 8,
|
64
|
+
:BSLASH => 9,
|
65
|
+
:PIPE => 10,
|
66
|
+
:PLUS => 11,
|
67
|
+
:NUMBER => 12 }
|
68
|
+
|
69
|
+
racc_nt_base = 13
|
70
|
+
|
71
|
+
racc_use_result_var = true
|
72
|
+
|
73
|
+
Racc_arg = [
|
74
|
+
racc_action_table,
|
75
|
+
racc_action_check,
|
76
|
+
racc_action_default,
|
77
|
+
racc_action_pointer,
|
78
|
+
racc_goto_table,
|
79
|
+
racc_goto_check,
|
80
|
+
racc_goto_default,
|
81
|
+
racc_goto_pointer,
|
82
|
+
racc_nt_base,
|
83
|
+
racc_reduce_table,
|
84
|
+
racc_token_table,
|
85
|
+
racc_shift_n,
|
86
|
+
racc_reduce_n,
|
87
|
+
racc_use_result_var ]
|
88
|
+
|
89
|
+
Racc_token_to_s_table = [
|
90
|
+
"$end",
|
91
|
+
"error",
|
92
|
+
"DOLLAR",
|
93
|
+
"LSQUARE",
|
94
|
+
"RSQUARE",
|
95
|
+
"LPAREN",
|
96
|
+
"RPAREN",
|
97
|
+
"LBRACE",
|
98
|
+
"RBRACE",
|
99
|
+
"BSLASH",
|
100
|
+
"PIPE",
|
101
|
+
"PLUS",
|
102
|
+
"NUMBER",
|
103
|
+
"$start",
|
104
|
+
"varaible",
|
105
|
+
"expression" ]
|
106
|
+
|
107
|
+
Racc_debug_parser = false
|
108
|
+
|
109
|
+
##### State transition tables end #####
|
110
|
+
|
111
|
+
# reduce 0 omitted
|
112
|
+
|
113
|
+
# reduce 1 omitted
|
114
|
+
|
115
|
+
module_eval(<<'.,.,', 'parser.y', 10)
|
116
|
+
def _reduce_2(val, _values, result)
|
117
|
+
result = val[0] rescue val[1]
|
118
|
+
result
|
119
|
+
end
|
120
|
+
.,.,
|
121
|
+
|
122
|
+
module_eval(<<'.,.,', 'parser.y', 11)
|
123
|
+
def _reduce_3(val, _values, result)
|
124
|
+
result = val[0]
|
125
|
+
result
|
126
|
+
end
|
127
|
+
.,.,
|
128
|
+
|
129
|
+
module_eval(<<'.,.,', 'parser.y', 12)
|
130
|
+
def _reduce_4(val, _values, result)
|
131
|
+
result = val[0] + val[1]
|
132
|
+
result
|
133
|
+
end
|
134
|
+
.,.,
|
135
|
+
|
136
|
+
module_eval(<<'.,.,', 'parser.y', 13)
|
137
|
+
def _reduce_5(val, _values, result)
|
138
|
+
result = val[0].to_i
|
139
|
+
result
|
140
|
+
end
|
141
|
+
.,.,
|
142
|
+
|
143
|
+
def _reduce_none(val, _values, result)
|
144
|
+
val[0]
|
145
|
+
end
|
146
|
+
|
147
|
+
end # class Parser
|
148
|
+
end # module EsiAttributeLanguageibute
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class EsiAttributeLanguage::SimpleGrammarParser
|
2
|
+
|
3
|
+
rule
|
4
|
+
\{ { [:LBRACE, text] }
|
5
|
+
\} { [:RBRACE, text] }
|
6
|
+
\$ { [:DOLLAR, text] }
|
7
|
+
\| { [:PIPE, text] }
|
8
|
+
\( { [:LPAREN, text] }
|
9
|
+
\) { [:RPAREN, text] }
|
10
|
+
[0-9]+ { [:NUMBER, text] }
|
11
|
+
'(\\'|[^'])*' { [:OTHER, text] }
|
12
|
+
(\\\|\\\$|\\\[|\\\]|\\\)|[^\|\(\)\$\{\}]{1})* { [:OTHER, text] }
|
13
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#--
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by rex 1.0.3
|
4
|
+
# from lexical definition file "lib/esi_attribute_language/grammar/simple.rex".
|
5
|
+
#++
|
6
|
+
|
7
|
+
module EsiAttributeLanguage
|
8
|
+
class SimpleGrammarParser
|
9
|
+
require 'strscan'
|
10
|
+
|
11
|
+
class ScanError < StandardError ; end
|
12
|
+
|
13
|
+
attr_reader :lineno
|
14
|
+
attr_reader :filename
|
15
|
+
|
16
|
+
def scan_setup ; end
|
17
|
+
|
18
|
+
def action &block
|
19
|
+
yield
|
20
|
+
end
|
21
|
+
|
22
|
+
def scan_str( str )
|
23
|
+
scan_evaluate str
|
24
|
+
do_parse
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_file( filename )
|
28
|
+
@filename = filename
|
29
|
+
open(filename, "r") do |f|
|
30
|
+
scan_evaluate f.read
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def scan_file( filename )
|
35
|
+
load_file filename
|
36
|
+
do_parse
|
37
|
+
end
|
38
|
+
|
39
|
+
def next_token
|
40
|
+
@rex_tokens.shift
|
41
|
+
end
|
42
|
+
|
43
|
+
def scan_evaluate( str )
|
44
|
+
scan_setup
|
45
|
+
@rex_tokens = []
|
46
|
+
@lineno = 1
|
47
|
+
ss = StringScanner.new(str)
|
48
|
+
state = nil
|
49
|
+
until ss.eos?
|
50
|
+
text = ss.peek(1)
|
51
|
+
@lineno += 1 if text == "\n"
|
52
|
+
case state
|
53
|
+
when nil
|
54
|
+
case
|
55
|
+
when (text = ss.scan(/\{/))
|
56
|
+
@rex_tokens.push action { [:LBRACE, text] }
|
57
|
+
|
58
|
+
when (text = ss.scan(/\}/))
|
59
|
+
@rex_tokens.push action { [:RBRACE, text] }
|
60
|
+
|
61
|
+
when (text = ss.scan(/\$/))
|
62
|
+
@rex_tokens.push action { [:DOLLAR, text] }
|
63
|
+
|
64
|
+
when (text = ss.scan(/\|/))
|
65
|
+
@rex_tokens.push action { [:PIPE, text] }
|
66
|
+
|
67
|
+
when (text = ss.scan(/\(/))
|
68
|
+
@rex_tokens.push action { [:LPAREN, text] }
|
69
|
+
|
70
|
+
when (text = ss.scan(/\)/))
|
71
|
+
@rex_tokens.push action { [:RPAREN, text] }
|
72
|
+
|
73
|
+
when (text = ss.scan(/[0-9]+/))
|
74
|
+
@rex_tokens.push action { [:NUMBER, text] }
|
75
|
+
|
76
|
+
when (text = ss.scan(/'(\\'|[^'])*'/))
|
77
|
+
@rex_tokens.push action { [:OTHER, text] }
|
78
|
+
|
79
|
+
when (text = ss.scan(/(\\\|\\\$|\\\[|\\\]|\\\)|[^\|\(\)\$\{\}]{1})*/))
|
80
|
+
@rex_tokens.push action { [:OTHER, text] }
|
81
|
+
|
82
|
+
else
|
83
|
+
text = ss.string[ss.pos .. -1]
|
84
|
+
raise ScanError, "can not match: '" + text + "'"
|
85
|
+
end # if
|
86
|
+
|
87
|
+
else
|
88
|
+
raise ScanError, "undefined state: '" + state.to_s + "'"
|
89
|
+
end # case state
|
90
|
+
end # until ss
|
91
|
+
end # def scan_evaluate
|
92
|
+
|
93
|
+
end # class
|
94
|
+
end # module
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class EsiAttributeLanguage::SimpleGrammarParser
|
2
|
+
|
3
|
+
token DOLLAR LPAREN RPAREN STRING VARIABLE OTHER PIPE LBRACE RBRACE QUOTE
|
4
|
+
|
5
|
+
rule
|
6
|
+
expression:
|
7
|
+
DOLLAR LPAREN variable RPAREN { result = val[2] } # $(...)
|
8
|
+
| OTHER { result = val[0] }
|
9
|
+
| DOLLAR LPAREN variable RPAREN expression { result = ConcatNode.new(val[2], val[4]) } # $(...)
|
10
|
+
| OTHER expression { result = ConcatNode.new(val[0], val[1]) }
|
11
|
+
;
|
12
|
+
|
13
|
+
variable:
|
14
|
+
variable PIPE variable { result = OrNode.new(val[0], val[2]) }
|
15
|
+
| variable LBRACE OTHER RBRACE { result = HashLookupNode.new(val[0], Node.cleanse_string(val[2])) }
|
16
|
+
| OTHER { result = VariableLookup.new(val[0]) }
|
17
|
+
;
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
#
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by Racc 1.4.6
|
4
|
+
# from Racc grammer file "".
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'racc/parser.rb'
|
8
|
+
module EsiAttributeLanguage
|
9
|
+
class SimpleGrammarParser < Racc::Parser
|
10
|
+
##### State transition tables begin ###
|
11
|
+
|
12
|
+
racc_action_table = [
|
13
|
+
1, 1, 1, 8, 10, 3, 3, 3, 11, 12,
|
14
|
+
11, 12, 5, 4, 9, 15, 8, 16 ]
|
15
|
+
|
16
|
+
racc_action_check = [
|
17
|
+
0, 10, 3, 11, 7, 0, 10, 3, 7, 7,
|
18
|
+
14, 14, 2, 1, 5, 12, 4, 15 ]
|
19
|
+
|
20
|
+
racc_action_pointer = [
|
21
|
+
-2, 10, 12, 0, 9, 14, nil, 0, nil, nil,
|
22
|
+
-1, -4, 8, nil, 2, 7, nil ]
|
23
|
+
|
24
|
+
racc_action_default = [
|
25
|
+
-8, -8, -8, -2, -8, -8, -4, -8, -7, 17,
|
26
|
+
-1, -8, -8, -3, -5, -8, -6 ]
|
27
|
+
|
28
|
+
racc_goto_table = [
|
29
|
+
2, 7, nil, 6, nil, nil, nil, nil, 14, nil,
|
30
|
+
13 ]
|
31
|
+
|
32
|
+
racc_goto_check = [
|
33
|
+
1, 2, nil, 1, nil, nil, nil, nil, 2, nil,
|
34
|
+
1 ]
|
35
|
+
|
36
|
+
racc_goto_pointer = [
|
37
|
+
nil, 0, -3 ]
|
38
|
+
|
39
|
+
racc_goto_default = [
|
40
|
+
nil, nil, nil ]
|
41
|
+
|
42
|
+
racc_reduce_table = [
|
43
|
+
0, 0, :racc_error,
|
44
|
+
4, 13, :_reduce_1,
|
45
|
+
1, 13, :_reduce_2,
|
46
|
+
5, 13, :_reduce_3,
|
47
|
+
2, 13, :_reduce_4,
|
48
|
+
3, 14, :_reduce_5,
|
49
|
+
4, 14, :_reduce_6,
|
50
|
+
1, 14, :_reduce_7 ]
|
51
|
+
|
52
|
+
racc_reduce_n = 8
|
53
|
+
|
54
|
+
racc_shift_n = 17
|
55
|
+
|
56
|
+
racc_token_table = {
|
57
|
+
false => 0,
|
58
|
+
:error => 1,
|
59
|
+
:DOLLAR => 2,
|
60
|
+
:LPAREN => 3,
|
61
|
+
:RPAREN => 4,
|
62
|
+
:STRING => 5,
|
63
|
+
:VARIABLE => 6,
|
64
|
+
:OTHER => 7,
|
65
|
+
:PIPE => 8,
|
66
|
+
:LBRACE => 9,
|
67
|
+
:RBRACE => 10,
|
68
|
+
:QUOTE => 11 }
|
69
|
+
|
70
|
+
racc_nt_base = 12
|
71
|
+
|
72
|
+
racc_use_result_var = true
|
73
|
+
|
74
|
+
Racc_arg = [
|
75
|
+
racc_action_table,
|
76
|
+
racc_action_check,
|
77
|
+
racc_action_default,
|
78
|
+
racc_action_pointer,
|
79
|
+
racc_goto_table,
|
80
|
+
racc_goto_check,
|
81
|
+
racc_goto_default,
|
82
|
+
racc_goto_pointer,
|
83
|
+
racc_nt_base,
|
84
|
+
racc_reduce_table,
|
85
|
+
racc_token_table,
|
86
|
+
racc_shift_n,
|
87
|
+
racc_reduce_n,
|
88
|
+
racc_use_result_var ]
|
89
|
+
|
90
|
+
Racc_token_to_s_table = [
|
91
|
+
"$end",
|
92
|
+
"error",
|
93
|
+
"DOLLAR",
|
94
|
+
"LPAREN",
|
95
|
+
"RPAREN",
|
96
|
+
"STRING",
|
97
|
+
"VARIABLE",
|
98
|
+
"OTHER",
|
99
|
+
"PIPE",
|
100
|
+
"LBRACE",
|
101
|
+
"RBRACE",
|
102
|
+
"QUOTE",
|
103
|
+
"$start",
|
104
|
+
"expression",
|
105
|
+
"variable" ]
|
106
|
+
|
107
|
+
Racc_debug_parser = false
|
108
|
+
|
109
|
+
##### State transition tables end #####
|
110
|
+
|
111
|
+
# reduce 0 omitted
|
112
|
+
|
113
|
+
module_eval(<<'.,.,', 'simple.y', 6)
|
114
|
+
def _reduce_1(val, _values, result)
|
115
|
+
result = val[2]
|
116
|
+
result
|
117
|
+
end
|
118
|
+
.,.,
|
119
|
+
|
120
|
+
module_eval(<<'.,.,', 'simple.y', 7)
|
121
|
+
def _reduce_2(val, _values, result)
|
122
|
+
result = val[0]
|
123
|
+
result
|
124
|
+
end
|
125
|
+
.,.,
|
126
|
+
|
127
|
+
module_eval(<<'.,.,', 'simple.y', 8)
|
128
|
+
def _reduce_3(val, _values, result)
|
129
|
+
result = ConcatNode.new(val[2], val[4])
|
130
|
+
result
|
131
|
+
end
|
132
|
+
.,.,
|
133
|
+
|
134
|
+
module_eval(<<'.,.,', 'simple.y', 9)
|
135
|
+
def _reduce_4(val, _values, result)
|
136
|
+
result = ConcatNode.new(val[0], val[1])
|
137
|
+
result
|
138
|
+
end
|
139
|
+
.,.,
|
140
|
+
|
141
|
+
module_eval(<<'.,.,', 'simple.y', 13)
|
142
|
+
def _reduce_5(val, _values, result)
|
143
|
+
result = OrNode.new(val[0], val[2])
|
144
|
+
result
|
145
|
+
end
|
146
|
+
.,.,
|
147
|
+
|
148
|
+
module_eval(<<'.,.,', 'simple.y', 14)
|
149
|
+
def _reduce_6(val, _values, result)
|
150
|
+
result = HashLookupNode.new(val[0], Node.cleanse_string(val[2]))
|
151
|
+
result
|
152
|
+
end
|
153
|
+
.,.,
|
154
|
+
|
155
|
+
module_eval(<<'.,.,', 'simple.y', 15)
|
156
|
+
def _reduce_7(val, _values, result)
|
157
|
+
result = VariableLookup.new(val[0])
|
158
|
+
result
|
159
|
+
end
|
160
|
+
.,.,
|
161
|
+
|
162
|
+
def _reduce_none(val, _values, result)
|
163
|
+
val[0]
|
164
|
+
end
|
165
|
+
|
166
|
+
end # class SimpleGrammarParser
|
167
|
+
end # module EsiAttributeLanguage
|