lib/qlang/parser.rb in qlang-0.0.14142135 vs lib/qlang/parser.rb in qlang-0.0.27000000
- old
+ new
@@ -17,22 +17,34 @@
time = Time.now
until lexed.token_str =~ /\A(:NLIN\d|:R\d)+\z/
fail "I'm so sorry, something wrong. Please feel free to report this." if Time.now > time + 10
case lexed.token_str
+ when /(:vector)(\d)/, /(:matrix)(\d)/, /(:tmatrix)(\d)/, /(:integral)(\d)/, /(:def_func)(\d)/
+ token_sym = $1.delete(':').to_sym
+ token_position = $2.to_i
+ token_val = lexed.lexeds[token_position][token_sym]
+
+ parsed = case token_sym
+ when :vector
+ VectorParser.execute(token_val)
+ when :matrix
+ MatrixParser.execute(token_val)
+ when :tmatrix
+ MatrixParser.execute(token_val, trans: true)
+ when :integral
+ IntegralParser.execute(token_val)
+ when :def_func
+ FuncParser.execute(token_val)
+ end
+ lexed.parsed!(token_position, parsed)
+
when /:LPRN\d(:CONT\d):RPRN\d/
cont_token_with_num = $1
cont_lexed = Lexer::ContLexer.new(lexed.get_value(cont_token_with_num))
- case cont_lexed.token_str
- when /(:NUM\d)+(:SCLN\d|:NLIN\d)(:NUM\d)/
- cont = MatrixParser.execute(cont_lexed)
- when /(:NUM\d)+/
- cont = VectorParser.execute(cont_lexed)
- else
- cont = "(#{cont_lexed.values.join(' ')})"
- end
+ cont = "(#{cont_lexed.values.join(' ')})"
lexed.squash_with_prn(cont_token_with_num, cont)
when /:LBRC\d(:CONT\d):RBRC\d/
cont_token_with_num = $1
cont_lexed = Lexer::ContLexer.new(lexed.get_value(cont_token_with_num))
@@ -43,33 +55,16 @@
else
cont = "{#{cont_lexed.values.join(' ')}}"
end
lexed.squash_with_prn(cont_token_with_num, cont)
- when /:FUNC\d/
+ when /:eval_func\d/
cont_token_with_num = $&
- cont_lexed = Lexer::FuncLexer.new(lexed.get_value(cont_token_with_num))
-
- case cont_lexed.token_str
- when /:FDEF\d:EQL\d:FOML\d/
- cont = FuncParser.execute(cont_lexed)
- lexed.ch_value(cont_token_with_num, cont)
- lexed.ch_token(cont_token_with_num, :R)
- end
-
- when /:ITGL\d/
- cont_token_with_num = $&
- cont = IntegralParser.execute(lexed.get_value(cont_token_with_num))
- lexed.ch_value(cont_token_with_num, cont)
- lexed.ch_token(cont_token_with_num, :R)
-
- when /:EFUNC\d/
- cont_token_with_num = $&
cont = lexed.get_value(cont_token_with_num)
lexed.squash_with_prn(cont_token_with_num, cont)
- when /:DIFF\d/
+ when /:differential\d/
cont_token_with_num = $&
cont = lexed.get_value(cont_token_with_num)
cont =~ /(d\/d[a-zA-Z]) (.*)/
cont = "#{$1}(#{FormulaParser.execute($2)})"
# FIX: Refactor
@@ -79,9 +74,10 @@
lexed.ch_token($&, :R)
end
lexed.squash_to_cont($1, 2) if lexed.token_str =~ /(:CONT\d|:R\d)(:CONT\d|:R\d)/
end
+
lexed.fix_r_txt!
lexed.values.join
end
module_function :execute
end