-
Notifications
You must be signed in to change notification settings - Fork 1
/
jsx.bnf
71 lines (45 loc) · 1.59 KB
/
jsx.bnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
(* Jsx Grammar in BNF - By Saber2pr *)
JSX ::= ("(")? JSXOPENED | JSXSELFCLOSE (")")?
PARAMETER ::= "(" (IDENTITY ("," IDENTITY)* (",")?)? ")"
EXPRESSION ::= JSX
| STRING
| NUMBER
| OBJ
| ARRAY
| ARROWFUNCTION
| CALLCHAIN
| FUNCTION
| BLOCK
STATEMENT ::= DECLAREVARIABLE
| VARIABLEASSIGN
| CALLCHAIN
| IFSTATEMENT
NUMBER ::= digit
TEXT ::= (letter | digit)*
STRING ::= '"' TEXT '"'
| "'" TEXT "'"
KEYWORD ::= "var"
| "let"
| "const"
IDENTITY ::= letter (NUMBER TEXT)?
OBJ ::= "{" (IDENTITY ":" EXPRESSION ("," IDENTITY ":" EXPRESSION)* (",")?)? "}"
ARRAY ::= "[" (EXPRESSION ("," EXPRESSION)* (",")?)? "]"
PROP ::= IDENTITY
| IDENTITY "=" JSXINNEREXPR
| IDENTITY "=" STRING
OPENTAG ::= "<" IDENTITY ((PROP)*)? ">"
CLOSETAG ::= "<" "/" IDENTITY ">"
JSXSELFCLOSE ::= "<" IDENTITY ((PROP)*)? "/" ">"
JSXINNEREXPR ::= "{" EXPRESSION "}"
JSXOPENED ::= OPENTAG (((JSX | TEXT)*)|JSXINNEREXPR) CLOSETAG
ARROWFUNCTION ::= PARAMETER "=" ">" EXPRESSION
FUNCTION ::= "function" (IDENTITY)? PARAMETER BLOCK
CALLCHAIN ::= (STRING|OBJ|ARRAY|IDENTITY) ("." IDENTITY (PARAMETER)?)*
| IDENTITY PARAMETER
VARIABLEASSIGN ::= IDENTITY "=" EXPRESSION
BLOCK ::= "{" STATEMENT (";" STATEMENT)* (";")? "}"
DECLAREVARIABLE ::= KEYWORD IDENTITY
| KEYWORD VARIABLEASSIGN
IFSTATEMENT ::= "if" PARAMETER (BLOCK|STATEMENT) ("else" (BLOCK|STATEMENT))?
RETURNSTATEMENT ::= "return" EXPRESSION
PROGRAM ::= (STATEMENT)*