grammars/stil.rb in origen_stil-0.2.1 vs grammars/stil.rb in origen_stil-0.3.0

- old
+ new

@@ -252,11 +252,11 @@ module SigrefExpr1 def s1 elements[1] end - def sigref_expression + def expression_subset elements[2] end def s2 elements[3] @@ -309,11 +309,11 @@ s3 << r4 if r4 r5 = _nt_s s3 << r5 if r5 - r6 = _nt_sigref_expression + r6 = _nt_expression_subset s3 << r6 if r6 r7 = _nt_s s3 << r7 if r7 @@ -350,178 +350,118 @@ node_cache[:sigref_expr][start_index] = r0 r0 end - def _nt_expression + def _nt_expression_subset start_index = index - if node_cache[:expression].has_key?(index) - cached = node_cache[:expression][index] + if node_cache[:expression_subset].has_key?(index) + cached = node_cache[:expression_subset][index] if cached - node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true + node_cache[:expression_subset][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index - r1 = _nt_sigref_expression + r1 = _nt_add if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else - r2 = _nt_time_expression + r2 = _nt_subtract if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else - @index = i0 - r0 = nil - end - end - - node_cache[:expression][start_index] = r0 - - r0 - end - - def _nt_sigref_expression - start_index = index - if node_cache[:sigref_expression].has_key?(index) - cached = node_cache[:sigref_expression][index] - if cached - node_cache[:sigref_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true - @index = cached.interval.end - end - return cached - end - - s0, i0 = [], index - loop do - i1 = index - r2 = _nt_add - if r2 - r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true - r1 = r2 - else - r3 = _nt_subtract + r3 = _nt_name if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true - r1 = r3 + r0 = r3 else - r4 = _nt_name + r4 = _nt_paren_expression if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true - r1 = r4 + r0 = r4 else - r5 = _nt_paren_expression - if r5 - r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true - r1 = r5 - else - @index = i1 - r1 = nil - end + @index = i0 + r0 = nil end end end - if r1 - s0 << r1 - else - break - end end - if s0.empty? - @index = i0 - r0 = nil - else - r0 = instantiate_node(SyntaxNode,input, i0...index, s0) - end - node_cache[:sigref_expression][start_index] = r0 + node_cache[:expression_subset][start_index] = r0 r0 end - def _nt_time_expression + def _nt_expression start_index = index - if node_cache[:time_expression].has_key?(index) - cached = node_cache[:time_expression][index] + if node_cache[:expression].has_key?(index) + cached = node_cache[:expression][index] if cached - node_cache[:time_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true + node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end - s0, i0 = [], index - loop do - i1 = index - r2 = _nt_add + i0 = index + r1 = _nt_add + if r1 + r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true + r0 = r1 + else + r2 = _nt_subtract if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true - r1 = r2 + r0 = r2 else - r3 = _nt_subtract + r3 = _nt_multiply if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true - r1 = r3 + r0 = r3 else - r4 = _nt_multiply + r4 = _nt_divide if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true - r1 = r4 + r0 = r4 else - r5 = _nt_divide + r5 = _nt_number_with_unit if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true - r1 = r5 + r0 = r5 else - r6 = _nt_number_with_unit + r6 = _nt_number if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true - r1 = r6 + r0 = r6 else - r7 = _nt_number + r7 = _nt_name if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true - r1 = r7 + r0 = r7 else - r8 = _nt_name + r8 = _nt_paren_expression if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true - r1 = r8 + r0 = r8 else - r9 = _nt_paren_expression - if r9 - r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true - r1 = r9 - else - @index = i1 - r1 = nil - end + @index = i0 + r0 = nil end end end end end end end - if r1 - s0 << r1 - else - break - end end - if s0.empty? - @index = i0 - r0 = nil - else - r0 = instantiate_node(SyntaxNode,input, i0...index, s0) - end - node_cache[:time_expression][start_index] = r0 + node_cache[:expression][start_index] = r0 r0 end def _nt_terminal @@ -944,11 +884,11 @@ module TimeExpr0 def s1 elements[1] end - def time_expression + def expression elements[2] end def s2 elements[3] @@ -984,11 +924,11 @@ s0 << r1 if r1 r2 = _nt_s s0 << r2 if r2 - r3 = _nt_time_expression + r3 = _nt_expression s0 << r3 if r3 r4 = _nt_s s0 << r4 if r4 @@ -7952,11 +7892,11 @@ end end module Name2 def to_ast - text_value + n :name, text_value end end def _nt_name start_index = index @@ -9030,10 +8970,20 @@ def signed_integer2 elements[4] end end + module Number3 + def to_ast + if text_value.to_f == text_value.to_i + text_value.to_i + else + text_value.to_f + end + end + end + def _nt_number start_index = index if node_cache[:number].has_key?(index) cached = node_cache[:number][index] if cached @@ -9046,10 +8996,12 @@ i0 = index r1 = _nt_signed_integer if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 + r0.extend(Number3) + r0.extend(Number3) else i2, s2 = index, [] r3 = _nt_signed_integer s2 << r3 if r3 @@ -9074,10 +9026,12 @@ r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 + r0.extend(Number3) + r0.extend(Number3) else i6, s6 = index, [] r7 = _nt_signed_integer s6 << r7 if r7 @@ -9102,10 +9056,12 @@ r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 + r0.extend(Number3) + r0.extend(Number3) else i10, s10 = index, [] r11 = _nt_signed_integer s10 << r11 if r11 @@ -9144,9 +9100,11 @@ r10 = nil end if r10 r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true r0 = r10 + r0.extend(Number3) + r0.extend(Number3) else @index = i0 r0 = nil end end