1616).
1717
1818-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 == $^
2520).
2621
2722-define (op2 (T1 , T2 ),
28- T1 == $& , T2 == $& ;
29- T1 == $| , T2 == $| ;
3023 T1 == $< , T2 == $> ;
3124 T1 == $+ , T2 == $+ ;
3225 T1 == $- , T2 == $- ;
3326 T1 == $* , T2 == $* ;
3427 T1 == $/ , T2 == $/ ;
3528 T1 == $: , T2 == $: ;
36- T1 == $< , T2 == $- ;
3729 T1 == $- , T2 == $> ;
38- T1 == $. , T2 == $. ;
39- T1 == $| , T2 == $>
30+ T1 == $. , T2 == $.
4031).
4132
4233-define (op1 (T ),
8374-define (or_op (T1 , T2 ),
8475 T1 == $| , T2 == $| ).
8576
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+
8691tokenize (String , Line , Opts ) ->
8792 File = case lists :keyfind (file , 1 , Opts ) of
8893 { file , V1 } -> V1 ;
@@ -230,15 +235,16 @@ tokenize([$.,T1,T2|Rest], Line, Scope, Tokens) when ?container2(T1, T2) ->
230235
231236% ## Three Token Operators
232237tokenize ([$. ,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 ) ->
234240 handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 , T3 ]), Scope , Tokens );
235241
236242tokenize ([$. ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
237243 handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 , T3 ]), Scope , Tokens );
238244
239245% ## Two Token Operators
240246tokenize ([$. ,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 ) ->
242248 handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 ]), Scope , Tokens );
243249
244250tokenize ([$. ,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) ->
315321
316322% ## Three Token Operators
317323tokenize ([$: ,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 ) ->
319326 tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ,T3 ]) }|Tokens ]);
320327
321328tokenize ([$: ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
322329 tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ,T3 ]) }|Tokens ]);
323330
324331% ## Two Token Operators
325332tokenize ([$: ,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 ) ->
327334 tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ]) }|Tokens ]);
328335
329336tokenize ([$: ,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) ->
370377tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? comp_op3 (T1 , T2 , T3 ) ->
371378 handle_op (Rest , Line , comp_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
372379
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+
373389tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? op3 (T1 , T2 , T3 ) ->
374390 handle_op (Rest , Line , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
375391
@@ -384,6 +400,9 @@ tokenize([T|Rest], Line, Scope, Tokens) when T == $(;
384400 handle_terminator (Rest , Line , Scope , Token , Tokens );
385401
386402% ## 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+
387406tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? comp_op2 (T1 , T2 ) ->
388407 handle_op (Rest , Line , comp_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
389408
0 commit comments