php Language Reference
Regular Grammar
( legend )Character Set | ||||
|---|---|---|---|---|
| let | Byte | :: | '\x00000000' .. '\x0000d7ff' | '\x0000e000' .. '\x0000fffd' | '\x00010000' .. '\x0010ffff'
| |
| let | Control | :: | '\00' .. '\1f' | '\7f' | '\ff'
| |
Basic elements of tokens | ||||
| ign | Etx | :: | "\1a" { Byte }
| |
| let | Space | :: | '\t '
| |
| let | Line | :: | '\n\r'
| |
| let | Digit | :: | '0' .. '9' | |
| let | Hex | :: | Digit | 'a' .. 'f' | 'A' .. 'F' | |
| let | Letter | :: | 'a' .. 'z' | 'A' .. 'Z' | |
| let | LabelChar | :: | Letter | '_' | '\7f' .. '\ff' | |
| let | LNumber | :: | Digit + | |
| let | DNumber | :: | ( { Digit } '.' Digit + ) | ( Digit + '.' { Digit } ) | |
| let | ENumber | :: | ( LNumber | DNumber ) 'eE' [ '+-' ] LNumber | |
| let | HNumber | :: | "0x" Hex + | |
| let | Label | :: | LabelChar { Digit | LabelChar } | |
| let | White | :: | ||
| let | TabSpace | :: | { Space } | |
| let | Tokens | :: | ';:,.[]()|^&+-/*=%!~$<>?@' | |
| let | Newline | :: | "\r" | "\n" | "\r\n" | |
| let | OpenTag | :: | "<script" White "language" { White } "=" { White } ( "php" | "\'php\'" | "\"php\"" ) { White } ">" | "<?php" White | |
Initial tokens | ||||
| tok | TOpenTag:GScript | :: | ||
| tok | TInlineHtml | :: | ||
| tok | THtmlComment | :: | "<!--" ( { Byte } - ( { Byte } "--" { Byte } ) ) "-->" | |
| tok | THtmlElmOpr | :: | "<" | |
GScript tokens | ||||
| tok | GScript:TCloseTag:[initial] | :: | ( "?>" | "</script" { White } ">" ) [ Newline ] | |
| ign | GScript:TWhite | :: | ||
| com | GScript:TLineComment | :: | ( "#" | "//" ) ( { Byte } - ( { Byte } ( "?>" | Newline ) { Byte } ) ) [ Newline ] | |
| com | GScript:TComment | :: | "/*" ( { Byte } - ( { Byte } "*/" { Byte } ) ) "*/" - TDocComment | |
| com | GScript:TDocComment | :: | "/**" ( { Byte } - ( { Byte } "*/" { Byte } ) ) "*/" | |
| tok | GScript:TOperator | :: | "::" | "=>" | "++" | "--" | "==" | "!=" | "<>" | "===" | "!==" | "<=" | ">=" | "-=" | "+=" | "*=" | "/=" | ".=" | "%=" | "<<=" | ">>=" | "&=" | "|=" | "^=" | "||" | "&&" | "<<" | ">>" | Tokens | |
| tok | GScript:TDouble | :: | ||
| tok | GScript:TDoubleQuote | :: | "\"" { ( Byte - '\\\"' ) | ( "\\" Byte ) } "\"" | |
| tok | GScript:TSingleQuote | :: | "\'" { ( Byte - '\'\\' ) | ( "\\" Byte ) } "\'" | |
| tok | GScript:TOpenCurly:[push], GScript | :: | "{" | |
| tok | GScript:TCloseCurly:[pop] | :: | "}" | |
| tok | GScript:TOpenDQuote:GDQuote | :: | "\"" | |
| tok | GScript:TOpenBQuote:GBQuote | :: | "\`" | |
| tok | GScript:TOpenSQuote:GSQuote | :: | "\'" | |
| tok | GScript:THeredoc:GHeredoc | :: | <= "<<<" TabSpace > 'a..zA..Z0..9\7f..\ff_' < '\n\r' > / '\n\r' | |
GHeredoc tokens | ||||
| tok | GHeredoc:THeredocEnd | :: | <? Newline > THeredoc < [ ';' ] Newline > / ';\n\r' | |
| tok | GHeredoc:THLiteral | :: | "\\" '0' .. '7' 1 , 3 | "\\x" Hex 1 , 2 | "\\" 'ntr\\${\"\'\`' | ( Byte - ( '\\${-' | Line | Digit | LabelChar ) ) + | '-${' | |
Script & literal tokens | ||||
| tok | GLitScript:TVariable | :: | "$" Label | |
| tok | GLitScript:TString | :: | ||
| tok | GLitScript:TObjOperator | :: | "->" | |
| tok | GLitScript:TInteger | :: | ||
| tok | GLiteral:TDOpenCurly:[push], GScript | :: | "${" | |
| tok | GLiteral:TOpenCurlyD:[push], GScript | :: | "{$" / "$" | |
| tok | GBQuote:TBLiteral | :: | "\\" '0' .. '7' 1 , 3 | "\\x" Hex 1 , 2 | "\\" 'ntr\\${\`\"\'' | ( Byte - ( '\\${-\`' | Digit | LabelChar ) ) + | '-${' | |
| tok | GDQuote:TDLiteral | :: | "\\" '0' .. '7' 1 , 3 | "\\x" Hex 1 , 2 | "\\" 'ntr\\${\"\'\`' | ( Byte - ( '\\${-\"' | Digit | LabelChar ) ) + | '-${' | |
| tok | GSQuote:TSLiteral | :: | ( ( Byte - '\\\'' ) | "\\" ( Byte - '\\\'' ) ) + | "\\\'" | "\\\\" | |
| tok | GDQuote:TCloseDQuote:GScript | :: | "\"" | |
| tok | GBQuote:TCloseBQuote:GScript | :: | "\`" | |
| tok | GSQuote:TCloseSQuote:GScript | :: | "\'" | |
Context-free Grammar
( legend )| start | Source | :: | ||
| let | Key | :: | for | |
| | | ~= | |||
| | | bool | |||
| | | [ | |||
| | | array | |||
| | | private | |||
| | | ; | |||
| | | += | |||
| | | __FILE__ | |||
| | | final | |||
| | | list | |||
| | | catch | |||
| | | public | |||
| | | __LINE__ | |||
| | | protected | |||
| | | @ | |||
| | | ||||
| | | boolean | |||
| | | ++ | |||
| | | object | |||
| | | ! | |||
| | | AND | |||
| | | *= | |||
| | | ] | |||
| | | .= | |||
| | | <= | |||
| | | -= | |||
| | | instanceof | |||
| | | continue | |||
| | | __METHOD__ | |||
| | | global | |||
| | | + | |||
| | | break | |||
| | | string | |||
| | | return | |||
| | | * | |||
| | | enddeclare | |||
| | | const | |||
| | | >= | |||
| | | new | |||
| | | class | |||
| | | exit | |||
| | | abstract | |||
| | | __CLASS__ | |||
| | | function | |||
| | | endswitch | |||
| | | <> | |||
| | | __FUNCTION__ | |||
| | | case | |||
| | | !== | |||
| | | %= | |||
| | | % | |||
| | | >>= | |||
| | | && | |||
| | | clone | |||
| | | != | |||
| | | /= | |||
| | | / | |||
| | | die | |||
| | | extends | |||
| | | <<= | |||
| | | , | |||
| | | -- | |||
| | | default | |||
| | | declare | |||
| | | endwhile | |||
| | | - | |||
| | | static | |||
| | | echo | |||
| | | isset | |||
| | | eval | |||
| | | use | |||
| | | === | |||
| | | implements | |||
| | | << | |||
| | | & | |||
| | | include_once | |||
| | | == | |||
| | | endif | |||
| | | interface | |||
| | | < | |||
| | | >> | |||
| | | endfor | |||
| | | include | |||
| | | unset | |||
| | | ~ | |||
| | | $ | |||
| | | try | |||
| | | -> | |||
| | | ^ | |||
| | | || | |||
| | | empty | |||
| | | int | |||
| | | endforeach | |||
| | | > | |||
| | | elseif | |||
| | | | | |||
| | | integer | |||
| | | ( | |||
| | | var | |||
| | | { | |||
| | | throw | |||
| | | :: | |||
| | | foreach | |||
| | | if | |||
| | | require_once | |||
| | | . | |||
| | | |= | |||
| | | real | |||
| | | XOR | |||
| | | ? | |||
| | | ^= | |||
| | | double | |||
| | | require | |||
| | | else | |||
| | | = | |||
| | | OR | |||
| | | : | |||
| | | as | |||
| | | while | |||
| | | ) | |||
| | | } | |||
| | | do | |||
| | | switch | |||
| | | float | |||
| | | &= | |||
| let | Key1 | :: | => | |
| | | ||||
| let | TopStms | :: | ||
| | | ||||
| | | ||||
| let | TopStms1 | :: | ||
| let | TopStms2 | :: | ||
| | | ||||
| let | TopStms3 | :: | ||
| let | PhpOpen | :: | ||
| let | PhpClose | :: | ||
| let | HtmlStm | :: | ||
| | | ||||
| | | _other_ | |||
| | | ||||
| let | InStm | :: | ||
| | | ||||
| | | ||||
| let | InStms | :: | ||
| | | ||||
| let | Stm | :: | break OptExp ; | |
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ; | |||
| | | global GlobalVars ; | |||
| | | use UseFile ; | |||
| | | ||||
| | | continue OptExp ; | |||
| | | throw Exp ; | |||
| | | return OptExp ; | |||
| | | unset Vars ; | |||
| | | static StaticVars ; | |||
| | | Exp ; | |||
| | | echo Exps ; | |||
| | | ||||
| | | for ( ExpFor ; ExpFor ; ExpFor ) ForStm | |||
| | | { InStms } | |||
| let | DeclArgs | :: | ||
| let | DeclArgs0 | :: | ||
| | | ||||
| let | DeclArg | :: | ||
| let | DeclStm | :: | : InStms enddeclare ; | |
| | | ||||
| let | ExpEach | :: | ||
| let | OptAs | :: | ||
| | | => VarRef | |||
| let | EachStm | :: | : InStms endforeach ; | |
| | | ||||
| let | Catches | :: | ||
| let | Catches0 | :: | ||
| | | ||||
| let | Catch | :: | catch ( TString TVariable ) { InStms } | |
| let | UseFile | :: | ||
| | | ( TDoubleQuote ) | |||
| | | ||||
| | | ( TSingleQuote ) | |||
| let | Vars | :: | ||
| let | Vars0 | :: | ||
| | | ||||
| let | Exps | :: | ||
| let | Exps0 | :: | ||
| | | ||||
| let | GlobalVars | :: | ||
| let | GlobalVars0 | :: | ||
| | | ||||
| let | StaticVars | :: | ||
| let | StaticVars0 | :: | ||
| | | ||||
| let | GlobalVar | :: | $ Var | |
| | | ||||
| let | StaticVar | :: | ||
| let | StaticScalar | :: | ||
| | | ||||
| | | array ( StaticArrayPairs ) | |||
| | | ||||
| | | ||||
| let | StaticArrayPairs | :: | ||
| | | StaticArrayPair StaticArrayPairs1 | |||
| let | StaticArrayPairs1 | :: | ||
| | | ||||
| | | , StaticArrayPair StaticArrayPairs1 | |||
| let | StaticArrayPairs0 | :: | ||
| let | StaticArrayPair | :: | ||
| | | ||||
| let | CommonScalar | :: | __FUNCTION__ | |
| | | __LINE__ | |||
| | | ||||
| | | __FILE__ | |||
| | | ||||
| | | ||||
| | | ||||
| | | __METHOD__ | |||
| | | __CLASS__ | |||
| | | ||||
| let | Cases | :: | { Cases0 } | |
| | | { ; Cases0 } | |||
| | | : ; Cases0 endswitch ; | |||
| | | : Cases0 endswitch ; | |||
| let | Cases0 | :: | ||
| | | ||||
| let | Case | :: | ||
| | | ||||
| let | CaseSep | :: | : | |
| | | ; | |||
| let | ForStm | :: | ||
| | | : InStms endfor ; | |||
| let | ExpFor | :: | ||
| | | ||||
| let | ExpFor0 | :: | ||
| | | ||||
| let | WhileStm | :: | : InStms endwhile ; | |
| | | ||||
| let | IfStm | :: | ||
| | | ||||
| let | ElseIfs0 | :: | ||
| let | ElseIfs | :: | ||
| | | ||||
| | | ||||
| let | ElseIfs2 | :: | ||
| let | ElseIfs1 | :: | ||
| | | ||||
| | | ||||
| let | ElseIfs3 | :: | ||
| let | ElseIf | :: | ||
| let | ElseIf2 | :: | else Stm | |
| let | ElseIf1 | :: | ||
| let | ElseIf3 | :: | else : InStms | |
| let | ClsDeclStm | :: | interface TString Extends { ClsStms } | |
| | | ClsTyp TString OptBase Implements { ClsStms } | |||
| let | Modifier1 | :: | var | |
| let | Modifier | :: | protected | |
| | | static | |||
| | | public | |||
| | | abstract | |||
| | | private | |||
| | | final | |||
| let | Modifiers1 | :: | ||
| let | Modifiers0 | :: | ||
| let | Modifiers | :: | ||
| | | ||||
| let | Constants | :: | ||
| let | Constants0 | :: | ||
| | | ||||
| let | Constant | :: | ||
| | | ||||
| let | ClsStm | :: | Modifiers function FunId ( FunPars ) FunBody | |
| | | ||||
| | | ||||
| let | FunBody | :: | ; | |
| | | { InStms } | |||
| let | ClsStms | :: | ||
| | | ||||
| let | Extends | :: | ||
| | | ||||
| let | Extends0 | :: | ||
| | | ||||
| let | Implements | :: | implements TString Implements0 | |
| | | ||||
| let | Implements0 | :: | ||
| | | ||||
| let | OptBase | :: | extends TString | |
| | | ||||
| let | ClsTyp | :: | final class | |
| | | abstract class | |||
| | | class | |||
| let | FunDeclStm | :: | function FunId ( FunPars ) { InStms } | |
| let | FunPars0 | :: | ||
| | | ||||
| let | FunPars | :: | ||
| | | ||||
| let | FunPar | :: | ||
| | | ||||
| let | OptTyp | :: | ||
| | | ||||
| let | OptVal | :: | ||
| | | ||||
| let | FunId | :: | ||
| | | & TString | |||
| let | Var | :: | ||
| let | VarProps | :: | ||
| | | ||||
| let | VarProp | :: | ||
| let | VarCall | :: | ||
| | | ||||
| let | FunCall | :: | ||
| | | ||||
| | | ||||
| let | MethodCall | :: | ||
| | | ||||
| let | FunArgs0 | :: | ||
| | | ||||
| let | FunArgs2 | :: | ||
| | | ||||
| let | FunArgs | :: | ( FunArgs2 ) | |
| let | FunArgs1 | :: | ||
| | | ||||
| let | FunArg | :: | & Var | |
| | | ||||
| let | BaseVar | :: | ||
| | | ||||
| let | VarRef | :: | ||
| | | & Var | |||
| let | ExpRef | :: | ||
| | | & Var | |||
| let | RefVar | :: | ||
| | | ||||
| | | ||||
| let | CompVar | :: | $ CompVar | |
| | | ||||
| | | { Exp } | |||
| let | CompVar1 | :: | ||
| | | ||||
| let | OptExp | :: | ||
| | | ||||
| let | OptExp1 | :: | ||
| | | ( OptExp ) | |||
| let | Exp | :: | include Exp | |
| | | ||||
| | | require_once Exp | |||
| | | include_once Exp | |||
| | | require Exp | |||
| let | Exp0 | :: | ||
| | | ||||
| let | Exp1 | :: | ||
| | | ||||
| let | Exp2 | :: | ||
| | | ||||
| let | Exp3 | :: | ||
| | | print Exp3 | |||
| let | Exp4 | :: | ||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| let | Exp5 | :: | ||
| | | ||||
| let | Exp6 | :: | ||
| | | ||||
| let | Exp7 | :: | ||
| | | ||||
| let | Exp8 | :: | ||
| | | ||||
| let | Exp9 | :: | ||
| | | ||||
| let | Exp10 | :: | ||
| | | ||||
| let | Exp11 | :: | ||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| let | Exp12 | :: | ||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| let | Exp13 | :: | ||
| | | ||||
| | | ||||
| let | Exp14 | :: | ||
| | | ||||
| | | ||||
| | | ||||
| let | Exp15 | :: | ||
| | | ||||
| | | ||||
| | | ||||
| let | Exp16 | :: | Var ++ | |
| | | - Exp16 | |||
| | | ||||
| | | ||||
| | | ||||
| | | clone Exp16 | |||
| | | ++ Var | |||
| | | @ Exp16 | |||
| | | ~ Exp16 | |||
| | | + Exp16 | |||
| | | ||||
| | | -- Var | |||
| | | Var -- | |||
| | | ! Exp16 | |||
| let | Exp17 | :: | array ( ArrayPairs ) | |
| | | die OptExp1 | |||
| | | ||||
| | | ||||
| | | TOpenBQuote Encapses TCloseBQuote | |||
| | | ( Exp ) | |||
| | | exit OptExp1 | |||
| | | ||||
| let | VarAsg | :: | ||
| | | & Var | |||
| | | ||||
| let | BuiltIn | :: | isset ( Vars ) | |
| | | eval ( Exp ) | |||
| | | empty ( Var ) | |||
| let | Cast | :: | ( real ) | |
| | | ( integer ) | |||
| | | ( boolean ) | |||
| | | ( unset ) | |||
| | | ( float ) | |||
| | | ( string ) | |||
| | | ( bool ) | |||
| | | ( object ) | |||
| | | ( array ) | |||
| | | ( double ) | |||
| | | ( int ) | |||
| let | ArrayPairs | :: | ||
| | | ||||
| let | ArrayPairs1 | :: | ||
| | | ||||
| | | ||||
| let | ArrayPairs0 | :: | ||
| let | ArrayPair | :: | ||
| | | ||||
| let | Scalar | :: | ||
| | | ||||
| | | ||||
| | | TOpenSQuote Encapses TCloseSQuote | |||
| | | TOpenDQuote Encapses TCloseDQuote | |||
| let | Encapses | :: | ||
| | | ||||
| let | Encaps | :: | ||
| | | ||||
| | | ||||
| | | ||||
| | | TDOpenCurly TString [ Exp ] } | |||
| | | ||||
| | | ||||
| | | ||||
| | | ||||
| | | _other_ | |||
| | | ||||
| | | ||||
| | | ||||
| let | AsgElms0 | :: | ||
| | | ||||
| let | AsgElms | :: | ||
| let | AsgElm | :: | ||
| | | ||||
| | | list ( AsgElms ) | |||
| let | ClsIdRef | :: | ||
| | | ||||
| let | DynClsIdRef | :: | ||
| | | ||||
| let | ObjProps | :: | ||
| let | ObjProps0 | :: | ||
| | | ||||
| let | ObjProp | :: | ||
| | | ||||
| | |

