PHP
Sintaxes completas representadas por
Diagrama Sintático - Diagrama de Sintaxe
(
ver convenções
) ou
BNF
(ver
convenções
).
Diagrama Sintático - Diagrama de Sintaxe
|
Diagrama Sintático - Diagrama de Sintaxe e BNF
|
BNF
1
.
PHP_script
PHP_script
: Statement*
2
.
Class_def
Class_def
: Class_mod CLASS_NAME
extends:
CLASS_NAME?
implements:
INTERFACE_NAME* Member*
3
.
Class_mod
Class_mod
: "abstract"? "final"?
4
.
Interface_def
Interface_def
: INTERFACE_NAME
extends:
INTERFACE_NAME* Member*
5
.
Member
Member
: Method | Attribute
6
.
Method
Method
: Signature Statement*?
7
.
Signature
Signature
: Method_mod
is_ref:
"&"? METHOD_NAME Formal_parameter*
8
.
Method_mod
Method_mod
: "public"? "protected"? "private"? "static"? "abstract"? "final"?
9
.
Formal_parameter
Formal_parameter
:
Type is_ref:
"&"?
var:
Name_with_default
10
.
Type
Type
: CLASS_NAME?
11
.
Name_with_default
Name_with_default
: VARIABLE_NAME Expr?
12
.
Attribute
Attribute
:
Attr_mod vars:
Name_with_default*
13
.
Attr_mod
Attr_mod
: "public"? "protected"? "private"? "static"? "const"?
14
.
Statement
Statement
: Class_def | Interface_def | Method | Return | Static_declaration | Global | Try | Throw | Eval_expr | If | While | Do | For | Foreach | Switch | Break | Continue | Declare | Nop
15
.
If
If
: Expr
iftrue:
Statement*
iffalse:
Statement*
16
.
While
While
: Expr Statement*
17
.
Do
Do
: Statement* Expr
18
.
For
For
:
init:
Expr?
cond:
Expr?
incr:
Expr? Statement*
19
.
Foreach
Foreach
: Expr
key:
Variable?
is_ref:
"&"?
val:
Variable Statement*
20
.
Switch
Switch
: Expr Switch_case*
21
.
Switch_case
Switch_case
: Expr? Statement*
22
.
Break
Break
: Expr?
23
.
Continue
Continue
: Expr?
24
.
Return
Return
: Expr?
25
.
Static_declaration
Static_declaration
:
vars:
Name_with_default*
26
.
Global
Global
: Variable_name*
27
.
Declare
Declare
: Directive+ Statement*
28
.
Directive
Directive
: DIRECTIVE_NAME Expr
29
.
Try
Try
: Statement*
catches:
Catch*
30
.
Catch
Catch
: CLASS_NAME VARIABLE_NAME Statement*
31
.
Throw
Throw
: Expr
32
.
Eval_expr
Eval_expr
: Expr
33
.
Nop
Nop
:
34
.
Expr
Expr
: Assignment | Cast | Unary_op | Bin_op | Constant | Instanceof | Variable | Pre_op | Method_invocation | New | Literal | Op_assignment | List_assignment | Post_op | Array | Conditional_expr | Ignore_errors
35
.
Literal
Literal
: INT
| REAL
| STRING
| BOOL
| NIL<>
36
.
Assignment
Assignment
: Variable
is_ref:
"&"? Expr
37
.
Op_assignment
Op_assignment
: Variable OP Expr
38
.
List_assignment
List_assignment
: List_element?* Expr
39
.
List_element
List_element
: Variable | Nested_list_elements
40
.
Nested_list_elements
Nested_list_elements
: List_element?*
41
.
Cast
Cast
: CAST Expr
42
.
Unary_op
Unary_op
: OP Expr
43
.
Bin_op
Bin_op
:
left:
Expr OP
right:
Expr
44
.
Conditional_expr
Conditional_expr
:
cond:
Expr
iftrue:
Expr
iffalse:
Expr
45
.
Ignore_errors
Ignore_errors
: Expr
46
.
Constant
Constant
: CLASS_NAME? CONSTANT_NAME
47
.
Instanceof
Instanceof
: Expr Class_name
48
.
Variable
Variable
: Target? Variable_name
array_indices:
Expr?*
49
.
Variable_name
Variable_name
: VARIABLE_NAME | Reflection
50
.
Reflection
Reflection
: Expr
51
.
Target
Target
: Expr | CLASS_NAME
52
.
Pre_op
Pre_op
: OP Variable
53
.
Post_op
Post_op
: Variable OP
54
.
Array
Array
: Array_elem*
55
.
Array_elem
Array_elem
:
key:
Expr?
is_ref:
"&"?
val:
Expr
56
.
Method_invocation
Method_invocation
: Target? Method_name Actual_parameter*
57
.
Method_name
Method_name
: METHOD_NAME | Reflection
58
.
Actual_parameter
Actual_parameter
:
is_ref:
"&"? Expr
59
.
New
New
: Class_name Actual_parameter*
60
.
Class_name
Class_name
: CLASS_NAME | Reflection
61
.
Commented_node
Commented_node
: Member | Statement | Interface_def | Class_def | Switch_case | Catch
62
.
Identifier
Identifier
: INTERFACE_NAME | CLASS_NAME | METHOD_NAME | VARIABLE_NAME | CAST | OP | CONSTANT_NAME | DIRECTIVE_NAME
63
.
Source_rep
Source_rep
: Identifier | Literal