OSDN Git Service

refactored parser
authorTomohiro Nishimura <tomohiro68@gmail.com>
Fri, 26 Mar 2010 17:31:36 +0000 (02:31 +0900)
committerTomohiro Nishimura <tomohiro68@gmail.com>
Fri, 26 Mar 2010 17:31:36 +0000 (02:31 +0900)
lib/mint/builder.rb
lib/mint/builder/mint_expression_parser.rb
lib/mint/builder/mint_expression_parser.y

index 0609b03..b78421e 100644 (file)
@@ -14,6 +14,7 @@ module Mint
         if expression.nil? || expression.empty?
           return NullExpression.new
         end
+        parser.instance_variable_set(:@yydebug, true)
         parser.parse(expression)
       rescue
         raise InvalidExpressionError, expression
index 6cbe54d..83bc2f0 100644 (file)
@@ -329,14 +329,14 @@ module_eval(<<'.,.,', 'mint_expression_parser.y', 20)
 
 module_eval(<<'.,.,', 'mint_expression_parser.y', 21)
   def _reduce_9(val, _values, result)
-     n = node(val[1]); n.parenthesis = true; result = Mint::SubtractionNode.new(n, node(val[4])) 
+     result = Mint::SubtractionNode.new(add_parenthesis(node(val[1])), node(val[4])) 
     result
   end
 .,.,
 
 module_eval(<<'.,.,', 'mint_expression_parser.y', 22)
   def _reduce_10(val, _values, result)
-     n = node(val[1]); n.parenthesis = true; result = n 
+     result = add_parenthesis(node(val[1])) 
     result
   end
 .,.,
@@ -385,7 +385,7 @@ module_eval(<<'.,.,', 'mint_expression_parser.y', 28)
 
 module_eval(<<'.,.,', 'mint_expression_parser.y', 29)
   def _reduce_17(val, _values, result)
-     n = node(val[1]); n.parenthesis = true; result = Mint::MultipleNode.new(n, val[3]) 
+     result = Mint::MultipleNode.new(add_parenthesis(node(val[1])), val[3]) 
     result
   end
 .,.,
@@ -406,7 +406,7 @@ module_eval(<<'.,.,', 'mint_expression_parser.y', 31)
 
 module_eval(<<'.,.,', 'mint_expression_parser.y', 33)
   def _reduce_20(val, _values, result)
-     n = node(val[1]); n.parenthesis = true; result = n 
+     result = add_parenthesis(node(val[1])) 
     result
   end
 .,.,
index 6c4d0b1..979d5c4 100644 (file)
@@ -19,19 +19,19 @@ class MintExpressionParser
        | exp '/' exp            { result = Mint::FractionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
        | exp '^' exp            { result = Mint::FactorialNode.new(node(val[0]), node(val[2])) }
        | exp DIV exp            { result = Mint::DivisionNode.new(node(val[0]), add_parenthesis(node(val[2]))) }
-       | '(' exp ')' '-' NUMBER { n = node(val[1]); n.parenthesis = true; result = Mint::SubtractionNode.new(n, node(val[4])) }
-       | '(' exp ')'            { n = node(val[1]); n.parenthesis = true; result = n }
+       | '(' exp ')' '-' NUMBER { result = Mint::SubtractionNode.new(add_parenthesis(node(val[1])), node(val[4])) }
+       | '(' exp ')'            { result = add_parenthesis(node(val[1])) }
        | '-' NUMBER   =UMINUS   { result = minus(val[1]) }
        | '-' multiple =UMINUS   { result = minus(val[1]) }
        | ROOT '(' exp ')'       { result = Mint::RootNode.new(val[2]) }
        | multiple multiple      { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
        | NUMBER multiple        { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
        | minus multiple         { result = Mint::MultipleNode.new(node(val[0]), node(val[1])) }
-       | '(' exp ')' exp        { n = node(val[1]); n.parenthesis = true; result = Mint::MultipleNode.new(n, val[3]) }
+       | '(' exp ')' exp        { result = Mint::MultipleNode.new(add_parenthesis(node(val[1])), val[3]) }
        | VARIABLE               { result = node(val[0]) }
        | NUMBER                 { result = node(val[0]) }
 
-    multiple: '(' exp ')'       { n = node(val[1]); n.parenthesis = true; result = n }
+    multiple: '(' exp ')'       { result = add_parenthesis(node(val[1])) }
             | ROOT '(' exp ')'  { result = Mint::RootNode.new(val[2]) }
             | VARIABLE          { result = node(val[0]) }