@@ -10,7 +10,8 @@ Nonterminals
10
10
open_curly close_curly
11
11
open_bit close_bit
12
12
base_comma_expr comma_expr optional_comma_expr matched_comma_expr
13
- call_args call_args_parens call_args_parens_not_one call_args_no_parens parens_call
13
+ call_args call_args_parens parens_call
14
+ call_args_no_parens call_args_no_parens_strict call_args_parens_not_one
14
15
stab stab_eol stab_op stab_expr stab_maybe_expr
15
16
kw_eol kw_expr kw_comma kw_base
16
17
matched_kw_expr matched_kw_comma matched_kw_base
@@ -142,16 +143,16 @@ matched_op_expr -> comp_expr_op matched_expr : { '$1', '$2' }.
142
143
143
144
block_expr -> parens_call call_args_parens do_block : build_identifier ('$1' , '$2' ++ '$3' ).
144
145
block_expr -> parens_call call_args_parens call_args_parens do_block : build_nested_parens ('$1' , '$2' , '$3' ++ '$4' ).
145
- block_expr -> dot_punctuated_identifier call_args_no_parens do_block : build_identifier ('$1' , '$2' ++ '$3' ).
146
+ block_expr -> dot_punctuated_identifier call_args_no_parens_strict do_block : build_identifier ('$1' , '$2' ++ '$3' ).
146
147
block_expr -> dot_do_identifier do_block : build_identifier ('$1' , '$2' ).
147
- block_expr -> dot_identifier call_args_no_parens do_block : build_identifier ('$1' , '$2' ++ '$3' ).
148
+ block_expr -> dot_identifier call_args_no_parens_strict do_block : build_identifier ('$1' , '$2' ++ '$3' ).
148
149
149
150
fn_expr -> fn_eol stab end_eol : build_fn ('$1' , build_stab (lists :reverse ('$2' ))).
150
151
fn_expr -> call_expr : '$1' .
151
152
152
- call_expr -> dot_punctuated_identifier call_args_no_parens : build_identifier ('$1' , '$2' ).
153
- call_expr -> dot_op_identifier call_args_no_parens : build_identifier ('$1' , '$2' ).
154
- call_expr -> dot_identifier call_args_no_parens : build_identifier ('$1' , '$2' ).
153
+ call_expr -> dot_punctuated_identifier call_args_no_parens_strict : build_identifier ('$1' , '$2' ).
154
+ call_expr -> dot_op_identifier call_args_no_parens_strict : build_identifier ('$1' , '$2' ).
155
+ call_expr -> dot_identifier call_args_no_parens_strict : build_identifier ('$1' , '$2' ).
155
156
call_expr -> dot_punctuated_identifier : build_identifier ('$1' , []).
156
157
call_expr -> dot_do_identifier : build_identifier ('$1' , nil ).
157
158
call_expr -> var : build_identifier ('$1' , nil ).
@@ -388,6 +389,11 @@ parens_call -> matched_expr dot_call_op : { '.', [{line,?line('$2')}], ['$1'] }.
388
389
matched_comma_expr -> matched_expr : ['$1' ].
389
390
matched_comma_expr -> matched_comma_expr ',' matched_expr : ['$3' |'$1' ].
390
391
392
+ call_args_no_parens_strict -> call_args_no_parens : '$1' .
393
+ call_args_no_parens_strict -> open_paren ')' : throw_no_parens_strict ('$1' ).
394
+ call_args_no_parens_strict -> open_paren matched_kw_base close_paren : throw_no_parens_strict ('$1' ).
395
+ call_args_no_parens_strict -> open_paren matched_expr ',' call_args_no_parens close_paren : throw_no_parens_strict ('$1' ).
396
+
391
397
call_args_no_parens -> matched_comma_expr : lists :reverse ('$1' ).
392
398
call_args_no_parens -> matched_kw_base : ['$1' ].
393
399
call_args_no_parens -> matched_comma_expr ',' matched_kw_base : lists :reverse (['$3' |'$1' ]).
@@ -584,3 +590,13 @@ build_stab([H|T], Marker, Temp, Acc) ->
584
590
build_stab ([], Marker , Temp , Acc ) ->
585
591
H = { Marker , build_block (lists :reverse (Temp )) },
586
592
lists :reverse ([H |Acc ]).
593
+
594
+ % % Errors
595
+
596
+ throw (Line , Error , Token ) ->
597
+ throw ({ error , { Line , ? MODULE , [Error , Token ] }}).
598
+
599
+ throw_no_parens_strict (Token ) ->
600
+ throw (? line (Token ), " invalid comma inside parenthesis. If you are making a "
601
+ " function call, do not insert spaces in between the function name and the "
602
+ " opening parentheses. Syntax error before: " , " )" ).
0 commit comments