コンパイラ 
構文解析 
Module 
0
1
| Module:
ModuleDecl ModuleDef
ModuleDecl ExternalModuleDecls ModuleDef
|
ModuleDecl 
0
1
2
3
| ModuleDecl:
"module" ModulePath ";"
ModulePath:
Identfier "." IdentPath
|
IdentPath 
0
1
| IdentifierPath:
IdentPath "." Identifier
Identifier
|
SymbolPath , SymbolName 
0
1
2
3
| SymbolPath:
IdentPath
SymbolName:
Identifier
|
ExternalModuleDecls 
0
1
2
3
4
5
6
7
8
9
10
11
12
| ExternalModuleDecls:
ExternalModuleDecl
ExternalModuleDecl ExternalModuleDecls
ExternalModuleDecl:
ImportExternalModule
UsingExternalModule
ImportExternalModule:
"import" ModulePath ";"
UsingExternalModule
"using" ModulePath ";"
|
ModuleDef 
0
1
2
3
4
5
6
7
8
9
| ModuleDef:
AliasDef
ClassDef
EnumDef
InterfaceDef
PodDef
StructDef
TypedefDef
UtilityDef
# ただしModuleNameと同じ必要がある
|
AliasDef 
0
1
2
| AliasDef:
'alias' SymbolPath SymbolName
# ここのSymbolPathはstaticなシンボルに限定
|
ClassDef 
EnumDef 
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| EnumDef:
'enum' EnumAssignValueDef ';'
'enum' EnumNoAssignValueDef ';'
'enum' '{' EnumValueDefs '}' ';'
EnumValueDef:
EnumAssignValueDef
EnumNoAssignValueDef
EnumAssignValueDef:
SymbolName '=' Expression
EnumNoAssignValueDef:
SymbolName
EnumValueDefs:
EnumValueDef
EnumValueDef ','
EnumValueDef ',' EnumValueDefs
|
InterfaceDef 
PodDef 
StructDef 
TypedefDef 
0
1
2
| TypedefDef:
'typedef' SymbolPath SymbolName
# ここのSymbolPathはstaticなシンボルに限定
|
UtilityDef 
|