forked from Stepami/hydrascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.txt
89 lines (70 loc) · 2.94 KB
/
grammar.txt
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Script -> StatementList
StatementList -> StatementListItem*
StatementListItem -> Statement
Declaration
Statement -> BlockStatement
ExpressionStatement
IfStatement
WhileStatement
ContinueStatement
BreakStatement
ReturnStatement
Declaration -> LexicalDeclaration
FunctionDeclaration
TypeDeclaration
BlockStatement -> '{' StatementList '}'
ExpressionStatement -> Expression
Expression -> CastExpression
AssignmentExpression
CastExpression -> ConditionalExpression 'as' 'string'
AssignmentExpression -> LeftHandSideExpression '=' Expression
LeftHandSideExpression -> MemberExpression
CallExpression
CallExpression -> MemberExpression Arguments (Arguments | '[' Expression ']' | '.' 'Ident')*
MemberExpression -> "Ident" ('[' Expression ']' | '.' 'Ident')*
Arguments -> '(' (Expression ',')* ')'
ConditionalExpression -> OrExpression ('?' Expression ':' Expression)?
OrExpression -> AndExpression ('||' AndExpression)*
AndExpression -> EqExpression ('&&' EqExpression)*
EqExpression -> RelExpression (('=='|'!=') RelExpression)*
RelExpression -> AddExpression (('<'|'>'|'<='|'>=') AddExpression)*
AddExpression -> MulExpression (('+'|'-') MulExpression)*
MulExpression -> UnaryExpression (('*'|'/'|'%'|'++'|'::') UnaryExpression)*
UnaryExpression -> LeftHandSideExpression | ('-'|'!'|'~') UnaryExpression
PrimaryExpression -> "Ident" | Literal | '(' Expression ')' | ObjectLiteral | ArrayLiteral
Literal -> "NullLiteral"
"IntegerLiteral"
"FloatLiteral"
"StringLiteral"
"BooleanLiteral"
ObjectLiteral -> '{' PropertyDefinitionList '}'
PropertyDefinitionList -> (FieldProperty ';')*
FieldProperty -> "Ident" ':' Expression
ArrayLiteral -> '[' ElementList ']'
ElementList -> (Expression ',')*
IfStatement -> 'if' '(' Expression ')' Statement ('else' Statement)?
WhileStatement -> 'while' '(' Expression ')' Statement
ContinueStatement -> 'continue'
BreakStatement -> 'break'
ReturnStatement -> 'return' Expression?
TypeDeclaration -> 'type' "Ident" = TypeValue
TypeValue -> TypeValueBase TypeValueSuffix*
TypeValueBase -> "Ident"
ObjectTypeBase
ObjectTypeBase -> '{' PropertyTypeList '}'
PropertyTypeList -> (PropertyType ';')*
PropertyType -> "Ident" ':' TypeValue
ArgTypeList -> (TypeValue ',')*
TypeValueSuffix -> '['']'
'?'
LexicalDeclaration -> LetOrConst "Ident" Initialization (',' "Ident" Initialization)*
LetOrConst -> 'let'
'const'
Initialization -> Typed
Initializer
Typed -> Type Initializer?
Initializer -> '=' Expression
FunctionDeclaration -> 'function' "Ident" '(' FunctionParameters? ')' Type? BlockStatement
FunctionParameters -> ParameterDeclaration (',' ParameterDeclaration)*
ParameterDeclaration -> "Ident" Type
Type -> ':' TypeValue