Skip to content

Statements.sdf3

pdmosses/java-front/lang.java/syntax/java/statements/Statements.sdf3

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
module 

// 14.5. Statements

imports
  java/classes/FieldDeclarations
  java/classes/MethodDeclarations
  java/lexical/Identifiers
  java/statements/Blocks
  java/names/Names
  java/types/ReferenceTypes
  java/expressions/Main

context-free sorts

  
  ForInit
  ForUpdate
  
  SwitchGroup
  
  
  CatchFormalParameter
  CatchType
  CatchTypeRest
  

context-free priorities

  Statement.IfElse  > Statement.If

context-free syntax

  .Labeled = <<Id> : <Statement>>

  .      = <if(<Expression>) <Statement>>
  .  = <if(<Expression>) <Statement> else <Statement>>

  .While = <while(<Expression>) <Statement>>

  .For     = <for(<ForInit>; <Expression?>; <ForUpdate>) <Statement>>
  .ForEach = <for(<{VariableModifier " "}*> <UnannType> <VarDeclId> : <Expression>) <Statement>>

  ForInit = Exprs
  ForInit.VarDecls = <<{VariableModifier " "}*> <UnannType> <{VarDecl ", "}+>>

  ForUpdate = Exprs

  .ExprList =  <<{Expression ", "}*>>

   = Block

  .Empty = ";"

  .ExpressionStatement = <<Expression>;>

   = ExpressionName "<" ExpressionName ">" Expression ";" {reject}
   = ExpressionName "<" ExpressionName "<" ExpressionName ">>" Expression ";" {reject} 
   = ExpressionName "<" ExpressionName "<" ExpressionName "<" ExpressionName ">>>" Expression ";" {reject} 

  .Assert = <assert <Expression>;>
  .Assert = <assert <Expression> : <Expression>;>

  .Switch = <
  switch(<Expression>) {
    <{SwitchGroup "\n"}*>
    <{SwitchLabel "\n"}*>
  }>

  SwitchGroup.SwitchGroup = <
  <{SwitchLabel "\n"}+>
  <{BlockStatement "\n"}+>
  >

  .CaseExpr     = <case <Expression> :>
//  SwitchLabel.CaseEnumName = <case <Id> :>
  .DefaultCase  = <default :>

  .DoWhile = <
  do <Statement>
  while(<Expression>);>

  .Break = <break;>
  .Break = <break <Id>;>

  .Continue = <continue;>
  .Continue = <continue <Id>;>

  .Return = <return;>
  .Return = <return <Expression>;>

  .Synchronized = <synchronized(<Expression>) <Block>>

  .Throw = <throw <Expression>;>

  .Try = <
  try <Block>
  <{CatchClause "\n"}+>>

  .TryFinally = <
  try <Block>
  <{CatchClause "\n"}*>
  finally <Block>>

  .Catch = <catch(<CatchFormalParameter>) <Block>>
  CatchFormalParameter.CatchParam = <<{VariableModifier " "}*> <CatchType> <VarDeclId>>
  CatchType.CatchType = <<UnannClassType> <{CatchTypeRest " "}*>>
  CatchTypeRest.CatchTypeElem = <| <ClassType>>

  .TryWithResources = <
  try (<{Resource "; "}*>) <Block> 
  <{CatchClause "\n"}*>>

  .TryWithResourcesSemiColon = <
  try (<{Resource "; "}*>;) <Block> 
  <{CatchClause "\n"}*>>

  .TryWithResources = <
  try (<{Resource "; "}*>) <Block> 
  <{CatchClause "\n"}*>
  finally <Block>>

  .TryWithResourcesSemiColon = <
  try (<{Resource "; "}*>;) <Block> 
  <{CatchClause "\n"}*>
  finally <Block>>

  .Resource = <<{VariableModifier " "}*> <UnannType> <VarDeclId> = <Expression>>

template options
  tokenize : "(;"

// new SDF3 table generator
context-free priorities

  Statement.IfElse  > Statement.If