1616).
1717
1818-define (op2 (T1 , T2 ),
19- T1 == $< , T2 == $> ;
2019 T1 == $+ , T2 == $+ ;
2120 T1 == $- , T2 == $- ;
2221 T1 == $* , T2 == $* ;
23- T1 == $/ , T2 == $/ ;
2422 T1 == $: , T2 == $: ;
25- T1 == $- , T2 == $> ;
26- T1 == $. , T2 == $.
23+ T1 == $- , T2 == $>
2724).
2825
2926-define (op1 (T ),
30- T == $* ;
31- T == $/ ;
3227 T == $= ;
3328 T == $|
3429).
4641-define (unary_op3 (T1 , T2 , T3 ),
4742 T1 == $~ , T2 == $~ , T3 == $~ ).
4843
49- -define (pin_op3 (T1 , T2 , T3 ),
50- T1 == $^ , T2 == $^ , T3 == $^
51- ).
44+ -define (exp_op3 (T1 , T2 , T3 ),
45+ T1 == $^ , T2 == $^ , T3 == $^ ).
46+
47+ -define (two_op (T1 , T2 ),
48+ T1 == $+ , T2 == $+ ;
49+ T1 == $- , T2 == $- ;
50+ T1 == $* , T2 == $* ).
51+
52+ -define (than_op (T1 , T2 ),
53+ T1 == $< , T2 == $> ).
5254
5355-define (mult_op (T ),
5456 T == $* orelse T == $/ ).
9496-define (range_op (T1 , T2 ),
9597 T1 == $. , T2 == $. ).
9698
99+ -define (default_op (T1 , T2 ),
100+ T1 == $/ , T2 == $/ ).
101+
97102tokenize (String , Line , Opts ) ->
98103 File = case lists :keyfind (file , 1 , Opts ) of
99104 { file , V1 } -> V1 ;
@@ -242,13 +247,13 @@ tokenize([$.,T1,T2|Rest], Line, Scope, Tokens) when ?container(T1, T2) ->
242247% ## Three Token Operators
243248tokenize ([$. ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when
244249 ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ); ? and_op3 (T1 , T2 , T3 ); ? or_op3 (T1 , T2 , T3 );
245- ? arrow_op3 (T1 , T2 , T3 ); ? pin_op3 (T1 , T2 , T3 ) ->
250+ ? arrow_op3 (T1 , T2 , T3 ); ? exp_op3 (T1 , T2 , T3 ) ->
246251 handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 , T3 ]), Scope , Tokens );
247252
248253% ## Two Token Operators
249254tokenize ([$. ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when
250255 ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ); ? arrow_op (T1 , T2 );
251- ? range_op (T1 , T2 ) ->
256+ ? range_op (T1 , T2 ); ? than_op ( T1 , T2 ); ? default_op ( T1 , T2 ); ? two_op ( T1 , T2 ) ->
252257 handle_call_identifier (Rest , Line , list_to_atom ([T1 , T2 ]), Scope , Tokens );
253258
254259tokenize ([$. ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? op2 (T1 , T2 ) ->
@@ -326,13 +331,13 @@ tokenize([$:,T1,T2|Rest], Line, Scope, Tokens) when ?container(T1, T2) ->
326331% ## Three Token Operators
327332tokenize ([$: ,T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when
328333 ? unary_op3 (T1 , T2 , T3 ); ? comp_op3 (T1 , T2 , T3 ); ? and_op3 (T1 , T2 , T3 ); ? or_op3 (T1 , T2 , T3 );
329- ? arrow_op3 (T1 , T2 , T3 ); ? pin_op3 (T1 , T2 , T3 ) ->
334+ ? arrow_op3 (T1 , T2 , T3 ); ? exp_op3 (T1 , T2 , T3 ) ->
330335 tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ,T3 ]) }|Tokens ]);
331336
332337% ## Two Token Operators
333338tokenize ([$: ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when
334339 ? comp_op2 (T1 , T2 ); ? and_op (T1 , T2 ); ? or_op (T1 , T2 ); ? arrow_op (T1 , T2 );
335- ? range_op (T1 , T2 ) ->
340+ ? range_op (T1 , T2 ); ? than_op ( T1 , T2 ); ? default_op ( T1 , T2 ); ? two_op ( T1 , T2 ) ->
336341 tokenize (Rest , Line , Scope , [{ atom , Line , list_to_atom ([T1 ,T2 ]) }|Tokens ]);
337342
338343tokenize ([$: ,T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? op2 (T1 , T2 ) ->
@@ -388,8 +393,8 @@ tokenize([T1,T2,T3|Rest], Line, Scope, Tokens) when ?or_op3(T1, T2, T3) ->
388393tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? arrow_op3 (T1 , T2 , T3 ) ->
389394 handle_op (Rest , Line , arrow_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
390395
391- tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? pin_op3 (T1 , T2 , T3 ) ->
392- handle_op (Rest , Line , pin_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
396+ tokenize ([T1 ,T2 ,T3 |Rest ], Line , Scope , Tokens ) when ? exp_op3 (T1 , T2 , T3 ) ->
397+ handle_op (Rest , Line , exp_op , list_to_atom ([T1 ,T2 ,T3 ]), Scope , Tokens );
393398
394399% ## Containers + punctuation tokens
395400tokenize ([T ,T |Rest ], Line , Scope , Tokens ) when T == $< ; T == $> ->
@@ -402,6 +407,12 @@ tokenize([T|Rest], Line, Scope, Tokens) when T == $(;
402407 handle_terminator (Rest , Line , Scope , Token , Tokens );
403408
404409% ## Two Token Operators
410+ tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? two_op (T1 , T2 ) ->
411+ handle_op (Rest , Line , two_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
412+
413+ tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? than_op (T1 , T2 ) ->
414+ handle_op (Rest , Line , than_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
415+
405416tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? range_op (T1 , T2 ) ->
406417 handle_op (Rest , Line , range_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
407418
@@ -417,6 +428,9 @@ tokenize([T1,T2|Rest], Line, Scope, Tokens) when ?and_op(T1, T2) ->
417428tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? or_op (T1 , T2 ) ->
418429 handle_op (Rest , Line , or_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
419430
431+ tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? default_op (T1 , T2 ) ->
432+ handle_op (Rest , Line , default_op , list_to_atom ([T1 , T2 ]), Scope , Tokens );
433+
420434tokenize ([T1 ,T2 |Rest ], Line , Scope , Tokens ) when ? op2 (T1 , T2 ) ->
421435 handle_op (Rest , Line , list_to_atom ([T1 , T2 ]), Scope , Tokens );
422436
0 commit comments