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