16
16
).
17
17
18
18
-define (op3 (T1 , T2 , T3 ),
19
- T1 == $< , T2 == $< , T3 == $< ;
20
- T1 == $> , T2 == $> , T3 == $> ;
21
- T1 == $^ , T2 == $^ , T3 == $^ ;
22
- T1 == $~ , T2 == $~ , T3 == $~ ;
23
- T1 == $& , T2 == $& , T3 == $& ;
24
- T1 == $| , T2 == $| , T3 == $|
19
+ T1 == $^ , T2 == $^ , T3 == $^
25
20
).
26
21
27
22
-define (op2 (T1 , T2 ),
28
- T1 == $& , T2 == $& ;
29
- T1 == $| , T2 == $| ;
30
23
T1 == $< , T2 == $> ;
31
24
T1 == $+ , T2 == $+ ;
32
25
T1 == $- , T2 == $- ;
33
26
T1 == $* , T2 == $* ;
34
27
T1 == $/ , T2 == $/ ;
35
28
T1 == $: , T2 == $: ;
36
- T1 == $< , T2 == $- ;
37
29
T1 == $- , T2 == $> ;
38
- T1 == $. , T2 == $. ;
39
- T1 == $| , T2 == $>
30
+ T1 == $. , T2 == $.
40
31
).
41
32
42
33
-define (op1 (T ),
83
74
-define (or_op (T1 , T2 ),
84
75
T1 == $| , T2 == $| ).
85
76
77
+ -define (and_op3 (T1 , T2 , T3 ),
78
+ T1 == $& , T2 == $& , T3 == $& ).
79
+
80
+ -define (or_op3 (T1 , T2 , T3 ),
81
+ T1 == $| , T2 == $| , T3 == $| ).
82
+
83
+ -define (arrow_op3 (T1 , T2 , T3 ),
84
+ T1 == $< , T2 == $< , T3 == $< ;
85
+ T1 == $> , T2 == $> , T3 == $> ).
86
+
87
+ -define (arrow_op (T1 , T2 ),
88
+ T1 == $< , T2 == $- ;
89
+ T1 == $| , T2 == $> ).
90
+
86
91
tokenize (String , Line , Opts ) ->
87
92
File = case lists :keyfind (file , 1 , Opts ) of
88
93
{ file , V1 } -> V1 ;
@@ -230,15 +235,16 @@ tokenize([$.,T1,T2|Rest], Line, Scope, Tokens) when ?container2(T1, T2) ->
230
235
231
236
% ## Three Token Operators
232
237
tokenize ([$. ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when
233
- ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ) ->
238
+ ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ); ? and_op3 (T1 , T2 , T3 ); ? or_op3 (T1 , T2 , T3 );
239
+ ? arrow_op3 (T1 , T2 , T3 ) ->
234
240
handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 , T3 ]), Scope , Tokens );
235
241
236
242
tokenize ([$. ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
237
243
handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 , T3 ]), Scope , Tokens );
238
244
239
245
% ## Two Token Operators
240
246
tokenize ([$. ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when
241
- ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ) ->
247
+ ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ); ? arrow_op ( T1 , T2 ) ->
242
248
handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 ]), Scope , Tokens );
243
249
244
250
tokenize ([$. ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? op2 (T1 , T2 ) ->
@@ -315,15 +321,16 @@ tokenize([$:,T1,T2|Rest], Line, Scope, Tokens) when ?container2(T1, T2) ->
315
321
316
322
% ## Three Token Operators
317
323
tokenize ([$: ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when
318
- ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ) ->
324
+ ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ); ? and_op3 (T1 , T2 , T3 ); ? or_op3 (T1 , T2 , T3 );
325
+ ? arrow_op3 (T1 , T2 , T3 ) ->
319
326
tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ,T3 ]) }|Tokens ]);
320
327
321
328
tokenize ([$: ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
322
329
tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ,T3 ]) }|Tokens ]);
323
330
324
331
% ## Two Token Operators
325
332
tokenize ([$: ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when
326
- ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ) ->
333
+ ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ); ? arrow_op ( T1 , T2 ) ->
327
334
tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ]) }|Tokens ]);
328
335
329
336
tokenize ([$: ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? op2 (T1 , T2 ) ->
@@ -370,6 +377,15 @@ tokenize([T1,T2,T3|Rest], Line, Scope, Tokens) when ?unary_op3(T1, T2, T3) ->
370
377
tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? comp_op3 (T1 , T2 , T3 ) ->
371
378
handle_op (Rest , Line , comp_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
372
379
380
+ tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? and_op3 (T1 , T2 , T3 ) ->
381
+ handle_op (Rest , Line , and_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
382
+
383
+ tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? or_op3 (T1 , T2 , T3 ) ->
384
+ handle_op (Rest , Line , or_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
385
+
386
+ tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? arrow_op3 (T1 , T2 , T3 ) ->
387
+ handle_op (Rest , Line , arrow_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
388
+
373
389
tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
374
390
handle_op (Rest , Line , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
375
391
@@ -384,6 +400,9 @@ tokenize([T|Rest], Line, Scope, Tokens) when T == $(;
384
400
handle_terminator (Rest , Line , Scope , Token , Tokens );
385
401
386
402
% ## Two Token Operators
403
+ tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? arrow_op (T1 , T2 ) ->
404
+ handle_op (Rest , Line , arrow_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
405
+
387
406
tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? comp_op2 (T1 , T2 ) ->
388
407
handle_op (Rest , Line , comp_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
389
408
0 commit comments