[Syntax] Redesign IfConfigDecl syntax

This commit is contained in:
Rintaro Ishizaki
2018-03-29 17:06:38 +09:00
parent e4e5c33519
commit fc3cbcda88
4 changed files with 52 additions and 70 deletions

View File

@@ -84,29 +84,32 @@ DECL_NODES = [
Child('Output', kind='ReturnClause', is_optional=True),
]),
# else-if-directive-clause -> '#elseif' expr stmt-list
Node('ElseifDirectiveClause', kind='Syntax',
traits=['WithStatements'],
# if-config-clause ->
# ('#if' | '#elseif' | '#else') expr? (stmt-list | switch-case-list)
Node('IfConfigClause', kind='Syntax',
children=[
Child('PoundElseif', kind='PoundElseifToken'),
Child('Condition', kind='Expr'),
Child('Statements', kind='CodeBlockItemList'),
Child('PoundKeyword', kind='Token',
token_choices=[
'PoundIfToken',
'PoundElseifToken',
'PoundElseToken',
]),
Child('Condition', kind='Expr',
is_optional=True),
Child('Elements', kind='Syntax',
node_choices=[
Child('Statements', kind='CodeBlockItemList'),
Child('SwitchCases', kind='SwitchCaseList')]),
]),
Node('IfConfigClauseList', kind='SyntaxCollection',
element='IfConfigClause'),
# if-config-decl -> '#if' expr stmt-list else-if-directive-clause-list
# else-clause? '#endif'
Node('IfConfigDecl', kind='Decl',
children=[
Child('PoundIf', kind='PoundIfToken'),
Child('Condition', kind='Expr'),
Child('Elements', kind='Syntax',
node_choices=[
Child('Statements', kind='CodeBlockItemList'),
Child('SwitchCases', kind='SwitchCaseList')]),
Child('ElseifDirectiveClauses', kind='ElseifDirectiveClauseList',
is_optional=True),
Child('ElseClause', kind='ElseDirectiveClause',
is_optional=True),
Child('Clauses', kind='IfConfigClauseList'),
Child('PoundEndif', kind='PoundEndifToken'),
]),
@@ -406,19 +409,6 @@ DECL_NODES = [
Child('Accessor', kind='AccessorBlock', is_optional=True),
]),
# else-if-directive-clause-list -> else-if-directive-clause
# else-if-directive-clause-list?
Node('ElseifDirectiveClauseList', kind='SyntaxCollection',
element='ElseifDirectiveClause'),
# else-directive-clause -> '#else' stmt-list
Node('ElseDirectiveClause', kind='Syntax',
traits=['WithStatements'],
children=[
Child('PoundElse', kind='PoundElseToken'),
Child('Statements', kind='CodeBlockItemList'),
]),
# access-level-modifier -> 'private' | 'private' '(' 'set' ')'
# | 'fileprivate' | 'fileprivate' '(' 'set' ')'
# | 'internal' | 'internal' '(' 'set' ')'