In: |
kwartz.rb
|
Parent: | Object |
abstract class for RubyTranslator, PHPTranslator, …
usage.
scanner = Kwartz::Scanner.new(input_str) parser = Kwartz::Parser.new(scanner) nodelist = parser.parse() translator = Kwartz::Translator.instance("ruby", scanner.newline) output_str = translator.translate(nodelist) print output_str
If you are defining a subclass of Translator, you should do the following task:
See the definition of RubyTranslator for detail.
if you define a subclass of Translator, you should call this method with self and a language name.
Some language such as JSP+JSTL or Velocity doesn’t have conditional operator (’? :’). condop_to_ifstmt() convert a statement node which have conditioanl operator to if-statement node which is equal to the origianl node.
ex.
:set(var = cond ? val1 : val2) ==> :if(cond) :set(var = val1) :else :set(var = val2) :end
Some language such as JSP+JSTL or Velocity doesn’t support ‘v += 1’, ‘v -= 1’, ‘v *= 1’, … normalize_assignment() convert a assign-statement node to normal assignment, such as ‘v = v+1’, ‘v = v-1’, ‘v = v*1’, …
ex.
:set(v += x) ==> :set(v = v+x) :set(v -= x) ==> :set(v = v-x) :set(v *= x) ==> :set(v = v*x) :set(v /= x) ==> :set(v = v/x) :set(v %= x) ==> :set(v = v%x) :set(v .+= x) ==> :set(v = v.+x)