module php/pp/version5/statements

rules
// Foreach allows references
  php5-to-box:
    Ref(var) -> H([SOpt(HS(), "0")], [ S("&") | [ var ] ])
H hs=0 [ "&" ~var ]
rules // The real class decleration // The extends and implements are optional, so they are // only printed if available php5-to-box: Class(type,s,Some(ext),Some(impl),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ type | [ H([SOpt(HS(), "1")], [ S(s) | [ ext | [ impl | [ S("{") ] ] ] ]) ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~type H hs=1 [ s ~ext ~impl "{"] ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: Class(type,s,None(),Some(impl),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ type | [ H([SOpt(HS(), "1")], [ S(s) | [ impl | [ S("{") ] ] ]) ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~type H hs=1 [ s ~impl "{"] ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: Class(type,s,Some(ext),None(),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ type | [ H([SOpt(HS(), "1")], [ S(s) | [ ext | [ S("{") ] ] ]) ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~type H hs=1 [ s ~ext "{"] ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: Class(type,s,None(),None(),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ type | [ H([SOpt(HS(), "1")], [ S(s) | [ S("{") ] ]) ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~type H hs=1 [ s "{"] ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: Implements(names) -> H([SOpt(HS(), "1")], [ FBOX(KW(), S("implements")) | [ names' ] ])
H hs=1 [ KW["implements"] ~names' ]
where <separate-by-comma> names => names' rules // Two more types of classes besides the normal type php5-to-box: AbstractClass() -> H([SOpt(HS(), "1")], [ FBOX(KW(), S("abstract")) | [ FBOX(KW(), S("class")) ] ])
H hs=1 [ KW["abstract"] KW["class"] ]
php5-to-box: FinalClass() -> H([SOpt(HS(), "1")], [ FBOX(KW(), S("final")) | [ FBOX(KW(), S("class")) ] ])
H hs=1 [ KW["final"] KW["class"] ]
rules // Modifiers php5-to-box: Public() -> H([], [ FBOX(KW(), S("public")) ])
H [ KW["public"] ]
php5-to-box: Protected() -> H([], [ FBOX(KW(), S("protected")) ])
H [ KW["protected"] ]
php5-to-box: Private() -> H([], [ FBOX(KW(), S("private")) ])
H [ KW["private"] ]
php5-to-box: Static() -> H([], [ FBOX(KW(), S("static")) ])
H [ KW["static"] ]
php5-to-box: Final() -> H([], [ FBOX(KW(), S("final")) ])
H [ KW["final"] ]
php5-to-box: Abstract() -> H([], [ FBOX(KW(), S("abstract")) ])
H [ KW["abstract"] ]
php5-to-box: Modifiers(mods) -> H([SOpt(HS(), "1")], [ mods ])
H hs=1 [ ~*mods ]
rules // instance variable with modifier php5-to-box: InstanceVariable(mods,vars) ->
H([SOpt(HS(), "1")], [ mods | [ H([SOpt(HS(), "0")], [ vars' | [ S(";") ] ]) ] ])
H hs=1 [ ~mods H hs=0 [ ~vars' ";" ] ]
where <separate-by-comma> vars => vars' rules // class constant decleration php5-to-box: ClassConstantDeclList(decls) ->
H([SOpt(HS(), "1")], [ FBOX(KW(), S("const")) | [ H([SOpt(HS(), "0")], [ decls' | [ S(";") ] ]) ] ])
H hs=1 [ KW["const"] H hs=0 [~decls' ";" ]]
where <separate-by-comma> decls => decls' php5-to-box: ClassConstantDecl(s,val) -> H([SOpt(HS(), "1")], [ S(s) | [ FBOX(KW(), S("=")) | [ H([], [ val ]) ] ] ])
H hs=1 [ s KW["="] H [ ~val ]]
rules // Within classes, a function _can_ have modifiers. So we add a new FunctionDecl with modifers as ClassMember php5-to-box: FunctionDecl(mods,s,params,MethodBody(topstat)) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S(s) | [ S("(") | [ params' | [ S(")") | [ S("{") ] ] ] ] ]) ] ] ]) | [ topstat ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~mods KW["function"] H hs=0 [ s "(" ~params' ")" "{"]] ~*topstat ] H hs=0 ["}"] ]
where <separate-by-comma> params => params' php5-to-box: FunctionDeclRef(mods,s,params,MethodBody(topstat)) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S("&") | [ S(s) | [ S("(") | [ params' | [ S(")") | [ S("{") ] ] ] ] ] ]) ] ] ]) | [ topstat ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ ~mods KW["function"] H hs=0 [ "&" s "(" ~params' ")" "{"]] ~*topstat ] H hs=0 ["}"] ]
where <separate-by-comma> params => params' php5-to-box: FunctionDecl(mods,s,params,AbstractMethodBody()) ->
V([SOpt(VS(), "0")], [ H([SOpt(HS(), "1")], [ S(" ") ]) | [ H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ]) ] ] ]) ] ])
V vs=0 [ H hs=1 [ " " ] H hs=1 [ ~mods KW["function"] H hs=0 [ s "(" ~params' ")"";" ]] ]
where <separate-by-comma> params => params' php5-to-box: FunctionDeclRef(mods,s,params,AbstractMethodBody()) ->
V([SOpt(VS(), "0")], [ H([SOpt(HS(), "1")], [ S(" ") ]) | [ H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S("&") | [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ] ]) ] ] ]) ] ])
V vs=0 [ H hs=1 [ " " ] H hs=1 [ ~mods KW["function"] H hs=0 [ "&" s "(" ~params' ")"";" ]] ]
where <separate-by-comma> params => params' rules // Some support for interfaces php5-to-box: InterfaceExtends(str) -> H([SOpt(HS(), "1")], [ FBOX(KW(), S("extends")) | [ str' ] ])
H hs=1 [ KW["extends"] ~str' ]
where <separate-by-comma> str => str' php5-to-box: InterfaceDecl(s,Some(exts),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ FBOX(KW(), S("interface")) | [ S(s) | [ exts | [ S("{") ] ] ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ KW["interface"] s ~exts "{" ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: InterfaceDecl(s,None(),members) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ FBOX(KW(), S("interface")) | [ S(s) | [ S("{") ] ] ]) | [ members ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ KW["interface"] s "{" ] ~*members ] H hs=0 [ "}" ] ]
php5-to-box: InterfaceFunction(Some(mods),s,params) ->
H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ]) ] ] ])
H hs=1 [ ~mods KW["function"] H hs=0 [ s "(" ~params' ")" ";" ] ]
where <separate-by-comma> params => params' php5-to-box: InterfaceFunctionRef(Some(mods),s,params) ->
H([SOpt(HS(), "1")], [ mods | [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S("&") | [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ] ]) ] ] ])
H hs=1 [ ~mods KW["function"] H hs=0 ["&" s "(" ~params' ")" ";" ] ]
where <separate-by-comma> params => params' php5-to-box: InterfaceFunction(None(),s,params) ->
H([SOpt(HS(), "1")], [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ]) ] ])
H hs=1 [ KW["function"] H hs=0 [ s "(" ~params' ")" ";" ] ]
where <separate-by-comma> params => params' php5-to-box: InterfaceFunctionRef(None(),s,params) ->
H([SOpt(HS(), "1")], [ FBOX(KW(), S("function")) | [ H([SOpt(HS(), "0")], [ S("&") | [ S(s) | [ S("(") | [ params' | [ S(")") | [ S(";") ] ] ] ] ] ]) ] ])
H hs=1 [ KW["function"] H hs=0 ["&" s "(" ~params' ")" ";" ] ]
where <separate-by-comma> params => params' rules // try - catch support php5-to-box: Catch(s,var,Body(topstat)) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "1")], [ FBOX(KW(), S("catch")) | [ H([SOpt(HS(), "0")], [ S("(") | [ S(s) ] ]) | [ H([SOpt(HS(), "0")], [ var | [ S(")") | [ S("{") ] ] ]) ] ] ]) | [ topstat ] ]) | [ H([SOpt(HS(), "0")], [ S("}") ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=1 [ KW["catch"] H hs=0 ["(" s] H hs=0 [ ~var ")" "{"]] ~*topstat ] H hs=0 [ "}" ] ]
php5-to-box: Try(Body(topstat),catch) ->
V([SOpt(VS(), "0")], [ V([SOpt(VS(), "0")|[SOpt(IS(), "2")]], [ H([SOpt(HS(), "0")], [ FBOX(KW(), S("try")) | [ S("{") ] ]) | [ topstat ] ]) | [ H([SOpt(HS(), "1")], [ S("}") | [ catch ] ]) ] ])
V vs=0 [ V vs=0 is=2 [ H hs=0 [ KW["try"] "{"] ~*topstat ] H hs=1 ["}" ~*catch ] ]
rules // There is also a throw statement php5-to-box: Throw(expr) ->
H([SOpt(HS(), "1")], [ FBOX(KW(), S("throw")) | [ H([SOpt(HS(), "0")], [ expr | [ S(";") ] ]) ] ])
H hs=1 [ KW["throw"] H hs=0 [~expr ";" ] ]
rules // Some typehinting php5-to-box: Param(s,var) -> H([SOpt(HS(), "1")], [ S(s) | [ var ] ])
H hs=1 [ s ~var ]
php5-to-box: ParamRef(s,var) -> H([SOpt(HS(), "1")], [ S(s) | [ H([SOpt(HS(), "0")], [ S("&") | [ var ] ]) ] ])
H hs=1 [ s H hs=0 [ "&" ~var ] ]
php5-to-box: ParamDefault(s,var,val) ->
H([SOpt(HS(), "1")], [ S(s) | [ H([SOpt(HS(), "0")], [ var | [ S("=") | [ val ] ] ]) ] ])
H hs=1 [ s H hs=0 [ ~var "=" ~val ] ]