on aa10604 help sign in
399 lines 7.1 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Reporting.Error.Syntax
4 ( Error(..)
5 --
6 , Decl(..)
7 , Infix(..)
8 , CustomType(..)
9 --
10 , Expr(..)
11 , Record(..)
12 , Tuple(..)
13 , List(..)
14 , Func(..)
15 , Case(..)
16 , If(..)
17 , Let(..)
18 , Def(..)
19 , Destruct(..)
20 --
21 , Pattern(..)
22 , PRecord(..)
23 , PTuple(..)
24 , PList(..)
25 --
26 , Type(..)
27 , TRecord(..)
28 , TTuple(..)
29 --
30 , Char(..)
31 , String(..)
32 , Escape(..)
33 , Number(..)
34 --
35 , Space(..)
36 , Operator(..)
37 , toReport
38 )
39 where
42import Prelude hiding (Char, String)
43import qualified Data.Char as Char
44import qualified Data.Name as Name
45import Data.Word (Word16)
46--import Numeric (showHex)
48import Parse.Primitives (Row, Col)
49--import qualified Parse.Primitives as P
50import qualified Reporting.Annotation as A
51--import qualified Reporting.Doc as D
52import qualified Reporting.Report as Report
53import qualified Reporting.Render.Code as Code
57-- ALL SYNTAX ERRORS
60data Error
61 = CommentOnNothing A.Region
62 | UnexpectedPort A.Region
63 | NoPorts A.Region
64 | ParseError Decl
68-- DECLARATIONS
71data Decl
72 = Module Row Col
73 | Import Row Col
74 | Annotation Name.Name Type Row Col
75 | Definition Name.Name Def Row Col
76 | TypeAlias Name.Name Row Col
77 | CustomType Name.Name CustomType Row Col
78 | Port Name.Name Row Col
79 | Infix Infix Row Col
80 ----
81 | EndlessDocComment Row Col
82 | DeclSpace Space Row Col
83 | DeclDeadend Row Col
86data Infix
87 = Precedence Row Col
88 | Associativity Row Col
91data CustomType
92 = CT_Variant Row Col
93 | CT_Space Space Row Col
94 | CT_Type Type Row Col
98-- EXPRESSIONS
101data Expr
102 = Let Let Row Col
103 | Case Case Row Col
104 | If If Row Col
105 | List List Row Col
106 | Record Record Row Col
107 | Update Expr Row Col
108 | Tuple Tuple Row Col
109 | Func Func Row Col
110 --
111 | Dot Row Col
112 | Access Row Col
113 | OperatorRHS Row Col
114 | OperatorRight Row Col
115 | OperatorReserved Operator Row Col
116 --
117 | Start Row Col
118 | Char Char Row Col
119 | String String Row Col
120 | Number Number Row Col
121 | Space Space Row Col
122 | EndlessShader Row Col
123 | ShaderProblem [Char.Char] Row Col
124 | IndentOperatorRight Row Col
125 | IndentMoreExpr Row Col
128data Record
129 = RecordOpen Row Col
130 | RecordEnd Row Col
131 | RecordField Row Col
132 | RecordEquals Row Col
133 | RecordExpr Expr Row Col
134 | RecordSpace Space Row Col
135 --
136 | RecordIndentOpen Row Col
137 | RecordIndentEnd Row Col
138 | RecordIndentField Row Col
139 | RecordIndentEquals Row Col
140 | RecordIndentExpr Row Col
143data Tuple
144 = TupleOpen Row Col
145 | TupleExpr Expr Row Col
146 | TupleSpace Space Row Col
147 | TupleEnd Row Col
148 | TupleOperatorClose Row Col
149 | TupleOperatorReserved Operator Row Col
150 --
151 | TupleIndentExpr Row Col
152 | TupleIndentEnd Row Col
155data List
156 = ListSpace Space Row Col
157 | ListOpen Row Col
158 | ListExpr Expr Row Col
159 | ListEnd Row Col
160 --
161 | ListIndentOpen Row Col
162 | ListIndentEnd Row Col
163 | ListIndentExpr Row Col
166data Func
167 = FuncSpace Space Row Col
168 | FuncArg Pattern Row Col
169 | FuncBody Expr Row Col
170 | FuncArrow Row Col
171 --
172 | FuncIndentArg Row Col
173 | FuncIndentArrow Row Col
174 | FuncIndentBody Row Col
177data Case
178 = CaseSpace Space Row Col
179 | CaseOf Row Col
180 | CasePattern Pattern Row Col
181 | CaseArrow Row Col
182 | CaseExpr Expr Row Col
183 | CaseBranch Expr Row Col
184 --
185 | CaseIndentOf Row Col
186 | CaseIndentExpr Row Col
187 | CaseIndentPattern Row Col
188 | CaseIndentArrow Row Col
189 | CaseIndentBranch Row Col
190 | CasePatternAlignment Word16 Row Col
193data If
194 = IfSpace Space Row Col
195 | IfThen Row Col
196 | IfElse Row Col
197 | IfElseBranchStart Row Col
198 --
199 | IfCondition Expr Row Col
200 | IfThenBranch Expr Row Col
201 | IfElseBranch Expr Row Col
202 --
203 | IfIndentCondition Row Col
204 | IfIndentThen Row Col
205 | IfIndentThenBranch Row Col
206 | IfIndentElseBranch Row Col
207 | IfIndentElse Row Col
210data Let
211 = LetSpace Space Row Col
212 | LetIn Row Col
213 | LetDefAlignment Word16 Row Col
214 | LetDefName Row Col
215 | LetDef Name.Name Def Row Col
216 | LetDestruct Destruct Row Col
217 | LetBody Expr Row Col
218 | LetIndentDef Row Col
219 | LetIndentIn Row Col
220 | LetIndentBody Row Col
223data Def
224 = DefSpace Space Row Col
225 | DefType Type Row Col
226 | DefNameRepeat Name.Name Row Col
227 | DefNameMatch Name.Name Name.Name Row Col
228 | DefArg Pattern Row Col
229 | DefEquals Row Col
230 | DefBody Expr Row Col
231 | DefIndentEquals Row Col
232 | DefIndentType Row Col
233 | DefIndentBody Row Col
234 | DefAlignment Word16 Row Col
237data Destruct
238 = DestructSpace Space Row Col
239 | DestructPattern Pattern Row Col
240 | DestructEquals Row Col
241 | DestructBody Expr Row Col
242 | DestructIndentEquals Row Col
243 | DestructIndentBody Row Col
247-- PATTERNS
250data Pattern
251 = PRecord PRecord Row Col
252 | PTuple PTuple Row Col
253 | PList PList Row Col
254 --
255 | PStart Row Col
256 | PChar Char Row Col
257 | PString String Row Col
258 | PNumber Number Row Col
259 | PFloat Int Row Col
260 | PAlias Row Col
261 | PWildcardNotVar Int Row Col
262 | PSpace Space Row Col
263 --
264 | PIndentStart Row Col
265 | PIndentAlias Row Col
268data PRecord
269 = PRecordOpen Row Col
270 | PRecordEnd Row Col
271 | PRecordField Row Col
272 | PRecordSpace Space Row Col
273 --
274 | PRecordIndentOpen Row Col
275 | PRecordIndentEnd Row Col
276 | PRecordIndentField Row Col
279data PTuple
280 = PTupleOpen Row Col
281 | PTupleEnd Row Col
282 | PTupleExpr Pattern Row Col
283 | PTupleSpace Space Row Col
284 --
285 | PTupleIndentOpen Row Col
286 | PTupleIndentEnd Row Col
287 | PTupleIndentExpr Row Col
290data PList
291 = PListOpen Row Col
292 | PListEnd Row Col
293 | PListExpr Pattern Row Col
294 | PListSpace Space Row Col
295 --
296 | PListIndentOpen Row Col
297 | PListIndentEnd Row Col
298 | PListIndentExpr Row Col
302-- TYPES
305data Type
306 = TRecord TRecord Row Col
307 | TTuple TTuple Row Col
308 | TVariant Row Col
309 | TArrow Row Col
310 --
311 | TStart Row Col
312 | TSpace Space Row Col
313 --
314 | TIndentStart Row Col
317data TRecord
318 = TRecordOpen Row Col
319 | TRecordEnd Row Col
320 --
321 | TRecordField Row Col
322 | TRecordColon Row Col
323 | TRecordType Type Row Col
324 --
325 | TRecordSpace Space Row Col
326 --
327 | TRecordIndentOpen Row Col
328 | TRecordIndentField Row Col
329 | TRecordIndentColon Row Col
330 | TRecordIndentType Row Col
331 | TRecordIndentEnd Row Col
334data TTuple
335 = TTupleOpen Row Col
336 | TTupleEnd Row Col
337 | TTupleType Type Row Col
338 | TTupleSpace Space Row Col
339 --
340 | TTupleIndentOpen Row Col
341 | TTupleIndentType Row Col
342 | TTupleIndentEnd Row Col
346-- LITERALS
349data Char
350 = CharEndless
351 | CharEscape Escape
352 | CharNotString Int
355data String
356 = StringEndless_Single
357 | StringEndless_Multi
358 | StringEscape Escape
361data Escape
362 = EscapeUnknown Word16 Word16
363 | BadUnicodeFormat Word16 Word16
364 | BadUnicodeCode Word16 Word16
365 | BadUnicodeLength Word16 Word16 Int Int
368data Number
369 = NumberEnd
370 | NumberDot Int
371 | NumberHexDigit
372 | NumberNoLeadingZero
376-- MISC
379data Space
380 = HasTab
381 | EndlessMultiComment
382 | UnexpectedDocComment
385data Operator
386 = OpDot
387 | OpPipe
388 | OpArrow
389 | OpEquals
390 | OpHasType
394-- TO REPORT
397toReport :: Code.Source -> Error -> Report.Report
398toReport source err =
399 error "TODO" source err