class Crokus::Visitor

Public Class Methods

new() click to toggle source
# File lib/crokus/visitor.rb, line 7
def initialize
  @ind=-2
  @verbose=true
  @verbose=false
end

Public Instance Methods

visit(ast) click to toggle source
# File lib/crokus/visitor.rb, line 13
def visit ast
  ast.accept(self)
end
visitAddressOf(ao,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 320
def visitAddressOf ao,args=nil
  indent "AddressOf"
  dedent
end
visitArrayOf(aof,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 75
def visitArrayOf aof,args=nil
  indent "ArrayOf"
  aof.type.accept(self)
  aof.size.accept(self) if aof.size
  dedent
  aof
end
visitArrayOrStructInit(init,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 314
def visitArrayOrStructInit init,args=nil
  indent "ArrayOrStructInit"
  init.elements.each{|e| e.accept(self)}
  dedent
end
visitArrow(arrow,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 300
def visitArrow arrow,args=nil
  indent "arrow"
  arrow.lhs.accept(self)
  arrow.rhs.accept(self)
  dedent
end
visitAssign(assign,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 140
def visitAssign assign,args=nil
  assign.lhs.accept(self)
  assign.op.accept(self)
  assign.rhs.accept(self)
  assign
end
visitBinary(expr,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 278
def visitBinary expr,args=nil
  indent "Binary"
  expr.lhs.accept(self,args)
  expr.op.accept(self)
  expr.rhs.accept(self,args)
  dedent
  expr
end
visitBody(body,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 344
def visitBody body,args=nil
  indent "body"
  body.stmts.each{|stmt| stmt.accept(self)}
  dedent
end
visitBreak(brk,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 224
def visitBreak brk,args=nil
  indent "Break"
  dedent
  brk
end
visitCase(case_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 200
def visitCase case_,args=nil
  indent "Case"
  case_.expr.accept(self)
  case_.body.accept(self)
  dedent
  case_
end
visitCastedExpr(cexpr,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 96
def visitCastedExpr cexpr,args=nil
  indent "CastedExpr"
  cexpr.type.accept(self)
  cexpr.expr.accept(self)
  dedent
  cexpr
end
visitCasting(cast,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 89
def visitCasting cast,args=nil
  indent "Casting"
  cast.type.accept(self)
  dedent
  cast
end
visitCharLit(lit,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 261
def visitCharLit lit,args=nil
  lit
end
visitCommaStmt(comma,args=nil) click to toggle source

.….……stmts.….….……

# File lib/crokus/visitor.rb, line 134
def visitCommaStmt comma,args=nil
  lhs=comma.lhs.accept(self)
  rhs=comma.rhs.accept(self)
  comma
end
visitCondExpr(cexpr,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 269
def visitCondExpr cexpr,args=nil
  indent "condexpr"
  cexpr.cond.accept(self)
  cexpr.lhs.accept(self,args)
  cexpr.rhs.accept(self,args)
  dedent
  cexpr
end
visitContinue(brk,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 230
def visitContinue brk,args=nil
  indent "Continue"
  dedent
  brk
end
visitDecl(decl,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 28
def visitDecl decl,args=nil
  indent "Decl"
  decl.type.accept(self)
  decl.var.accept(self) if decl.var #case of struct decl only.
  decl.init.accept(self) if decl.init
  dedent
  decl
end
visitDefine(define,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 44
def visitDefine define,args=nil
  indent "Define"
  define.name.accept(self)
  define.expr.accept(self)
  dedent
  define
end
visitDeref(deref,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 339
def visitDeref deref,args=nil
  indent "Deref"
  dedent
end
visitDesignUnit(du,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 21
def visitDesignUnit du,args=nil
  indent "DesignUnit"
  du.list.each{|e| e.accept(self)}
  dedent
  du
end
visitDoWhile(while_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 216
def visitDoWhile while_,args=nil
  indent "DoWhile"
  while_.cond.accept(self)
  while_.body.each{|stmt| stmt.accept(self)}
  dedent
  while_
end
visitFloatLit(lit,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 265
def visitFloatLit lit,args=nil
  lit
end
visitFor(for_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 167
def visitFor for_,args=nil
  indent "For"
  for_.init.each{|stmt| stmt.accept(self)}
  for_.cond.accept(self)
  for_.increment.accept(self)
  for_.body.accept(self)
  dedent
  for_
end
visitFormalArg(formalArg,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 125
def visitFormalArg formalArg,args=nil
  indent "FormalArg"
  formalArg.name.accept(self) if formalArg.name # e.g : main(void)
  formalArg.type.accept(self)
  dedent
  formalArg
end
visitFunCall(fcall,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 159
def visitFunCall fcall,args=nil
  indent "FunCall"
  fcall.name.accept(self)
  fcall.args.each{|arg| arg.accept(self)}
  dedent
  fcall
end
visitFunction(func,args=nil) click to toggle source

.….…. end of types.….…..

# File lib/crokus/visitor.rb, line 106
def visitFunction func,args=nil
  indent "Function"
  func.type.accept(self)
  func.name.accept(self)
  func.args.each{|arg| arg.accept(self)}
  func.body.accept(self)
  dedent
  func
end
visitFunctionProto(func,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 116
def visitFunctionProto func,args=nil
  indent "FunctionProto"
  func.type.accept(self)
  func.name.accept(self)
  func.args.each{|arg| arg.accept(self)}
  dedent
  func
end
visitGoto(goto,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 242
def visitGoto goto,args=nil
  indent "Goto"
  goto.label.accept(self)
  dedent
  goto
end
visitIdent(ident,args=nil) click to toggle source

.….…..expresions.….…..

# File lib/crokus/visitor.rb, line 249
def visitIdent ident,args=nil
  ident
end
visitIf(if_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 184
def visitIf if_,args=nil
  indent "If"
  if_.cond.accept(self)
  if_.body.accept(self)
  dedent
  if_
end
visitInclude(include,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 37
  def visitInclude include,args=nil
    indent "Include"
    include.name.accept(self)
    dedent
    include
  end

  def visitDefine define,args=nil
    indent "Define"
    define.name.accept(self)
    define.expr.accept(self)
    dedent
    define
  end

  def visitTypedef typdef,args=nil
    indent "Typdef"
    typdef.type.accept(self)
    typdef.name.accept(self)
    dedent
    typdef
  end

  def visitType type,args=nil
    indent "Type"
    type.precisions.each{|precision| precision.accept(self)}
    type.name.accept(self)
    dedent
    type
  end

  def visitPointerTo pto,args=nil
    indent "PointerTo"
    pto.type.accept(self)
    dedent
    pto
  end

  def visitArrayOf aof,args=nil
    indent "ArrayOf"
    aof.type.accept(self)
    aof.size.accept(self) if aof.size
    dedent
    aof
  end

  def visitStruct struct,args=nil
    indent "Struct"
    dedent
    struct
  end

  def visitCasting cast,args=nil
    indent "Casting"
    cast.type.accept(self)
    dedent
    cast
  end

  def visitCastedExpr cexpr,args=nil
    indent "CastedExpr"
    cexpr.type.accept(self)
    cexpr.expr.accept(self)
    dedent
    cexpr
  end

  #......... end of types..........

  def visitFunction func,args=nil
    indent "Function"
    func.type.accept(self)
    func.name.accept(self)
    func.args.each{|arg| arg.accept(self)}
    func.body.accept(self)
    dedent
    func
  end

  def visitFunctionProto func,args=nil
    indent "FunctionProto"
    func.type.accept(self)
    func.name.accept(self)
    func.args.each{|arg| arg.accept(self)}
    dedent
    func
  end

  def visitFormalArg formalArg,args=nil
    indent "FormalArg"
    formalArg.name.accept(self) if formalArg.name # e.g : main(void)
    formalArg.type.accept(self)
    dedent
    formalArg
  end

  #...........stmts...............
  def visitCommaStmt comma,args=nil
    lhs=comma.lhs.accept(self)
    rhs=comma.rhs.accept(self)
    comma
  end

  def visitAssign assign,args=nil
    assign.lhs.accept(self)
    assign.op.accept(self)
    assign.rhs.accept(self)
    assign
  end

  def visitPostFixAccu accu,args=nil
    lhs=accu.lhs.accept(self,args) if accu.lhs #++i
    op =accu.op.accept(self)
    accu
  end

  def visitPreFixAccu accu,args=nil
    lhs=accu.lhs.accept(self,args) if accu.lhs #++i
    op =accu.op.accept(self)
    accu
  end

  def visitFunCall fcall,args=nil
    indent "FunCall"
    fcall.name.accept(self)
    fcall.args.each{|arg| arg.accept(self)}
    dedent
    fcall
  end

  def visitFor for_,args=nil
    indent "For"
    for_.init.each{|stmt| stmt.accept(self)}
    for_.cond.accept(self)
    for_.increment.accept(self)
    for_.body.accept(self)
    dedent
    for_
  end

  def visitReturn ret,args=nil
    indent "Return"
    ret.expr.accept(self) if ret.expr
    dedent
    ret
  end

  def visitIf if_,args=nil
    indent "If"
    if_.cond.accept(self)
    if_.body.accept(self)
    dedent
    if_
  end

  def visitSwitch sw_,args=nil
    indent "Switch"
    sw_.expr.accept(self)
    sw_.cases.each{|case_| case_.accept(self)}
    dedent
    sw_
  end

  def visitCase case_,args=nil
    indent "Case"
    case_.expr.accept(self)
    case_.body.accept(self)
    dedent
    case_
  end

  def visitWhile while_,args=nil
    indent "While"
    while_.cond.accept(self)
    while_.body.each{|stmt| stmt.accept(self)}
    dedent
    while_
  end

  def visitDoWhile while_,args=nil
    indent "DoWhile"
    while_.cond.accept(self)
    while_.body.each{|stmt| stmt.accept(self)}
    dedent
    while_
  end

  def visitBreak brk,args=nil
    indent "Break"
    dedent
    brk
  end

  def visitContinue brk,args=nil
    indent "Continue"
    dedent
    brk
  end

  def visitLabelledStmt label,args=nil
    indent "LabelledStmt"
    dedent
    label
  end

  def visitGoto goto,args=nil
    indent "Goto"
    goto.label.accept(self)
    dedent
    goto
  end
  #..........expresions..........
  def visitIdent ident,args=nil
    ident
  end

  def visitIntLit lit,args=nil
    lit
  end

  def visitStrLit lit,args=nil
    lit
  end

  def visitCharLit lit,args=nil
    lit
  end

  def visitFloatLit lit,args=nil
    lit
  end

  def visitCondExpr cexpr,args=nil
    indent "condexpr"
    cexpr.cond.accept(self)
    cexpr.lhs.accept(self,args)
    cexpr.rhs.accept(self,args)
    dedent
    cexpr
  end

  def visitBinary expr,args=nil
    indent "Binary"
    expr.lhs.accept(self,args)
    expr.op.accept(self)
    expr.rhs.accept(self,args)
    dedent
    expr
  end

  def visitUnary unary,args=nil
    indent "Unary"
    dedent
    unary
  end

  def visitParenth par,args=nil
    indent "Parenth"
    par.expr.accept(self)
    dedent
    par
  end

  def visitArrow arrow,args=nil
    indent "arrow"
    arrow.lhs.accept(self)
    arrow.rhs.accept(self)
    dedent
  end

  def visitIndexed index,args=nil
    indent "Index"
    index.lhs.accept(self)
    index.rhs.accept(self)
    dedent
  end

  def visitArrayOrStructInit init,args=nil
    indent "ArrayOrStructInit"
    init.elements.each{|e| e.accept(self)}
    dedent
  end

  def visitAddressOf ao,args=nil
    indent "AddressOf"
    dedent
  end

  def visitPointed pointed,args=nil
    indent "Pointed"
    pointed.lhs.accept(self)
    pointed.rhs.accept(self)
    dedent
  end

  def visitSizeof sizeof,args=nil
    indent "Sizeof"
    sizeof.type.accept(self)
    dedent
    sizeof
  end

  def visitDeref deref,args=nil
    indent "Deref"
    dedent
  end

  def visitBody body,args=nil
    indent "body"
    body.stmts.each{|stmt| stmt.accept(self)}
    dedent
  end
end
visitIndexed(index,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 307
def visitIndexed index,args=nil
  indent "Index"
  index.lhs.accept(self)
  index.rhs.accept(self)
  dedent
end
visitIntLit(lit,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 253
def visitIntLit lit,args=nil
  lit
end
visitLabelledStmt(label,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 236
def visitLabelledStmt label,args=nil
  indent "LabelledStmt"
  dedent
  label
end
visitParenth(par,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 293
def visitParenth par,args=nil
  indent "Parenth"
  par.expr.accept(self)
  dedent
  par
end
visitPointed(pointed,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 325
def visitPointed pointed,args=nil
  indent "Pointed"
  pointed.lhs.accept(self)
  pointed.rhs.accept(self)
  dedent
end
visitPointerTo(pto,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 68
def visitPointerTo pto,args=nil
  indent "PointerTo"
  pto.type.accept(self)
  dedent
  pto
end
visitPostFixAccu(accu,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 147
def visitPostFixAccu accu,args=nil
  lhs=accu.lhs.accept(self,args) if accu.lhs #++i
  op =accu.op.accept(self)
  accu
end
visitPreFixAccu(accu,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 153
def visitPreFixAccu accu,args=nil
  lhs=accu.lhs.accept(self,args) if accu.lhs #++i
  op =accu.op.accept(self)
  accu
end
visitReturn(ret,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 177
def visitReturn ret,args=nil
  indent "Return"
  ret.expr.accept(self) if ret.expr
  dedent
  ret
end
visitSizeof(sizeof,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 332
def visitSizeof sizeof,args=nil
  indent "Sizeof"
  sizeof.type.accept(self)
  dedent
  sizeof
end
visitStrLit(lit,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 257
def visitStrLit lit,args=nil
  lit
end
visitStruct(struct,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 83
def visitStruct struct,args=nil
  indent "Struct"
  dedent
  struct
end
visitSwitch(sw_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 192
def visitSwitch sw_,args=nil
  indent "Switch"
  sw_.expr.accept(self)
  sw_.cases.each{|case_| case_.accept(self)}
  dedent
  sw_
end
visitToken(tok, args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 17
def visitToken tok, args=nil
  tok
end
visitType(type,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 60
def visitType type,args=nil
  indent "Type"
  type.precisions.each{|precision| precision.accept(self)}
  type.name.accept(self)
  dedent
  type
end
visitTypedef(typdef,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 52
def visitTypedef typdef,args=nil
  indent "Typdef"
  typdef.type.accept(self)
  typdef.name.accept(self)
  dedent
  typdef
end
visitUnary(unary,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 287
def visitUnary unary,args=nil
  indent "Unary"
  dedent
  unary
end
visitWhile(while_,args=nil) click to toggle source
# File lib/crokus/visitor.rb, line 208
def visitWhile while_,args=nil
  indent "While"
  while_.cond.accept(self)
  while_.body.each{|stmt| stmt.accept(self)}
  dedent
  while_
end