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 ] ]