@@ -10,7 +10,8 @@ Nonterminals
1010 open_curly close_curly
1111 open_bit close_bit
1212 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
1415 stab stab_eol stab_op stab_expr stab_maybe_expr
1516 kw_eol kw_expr kw_comma kw_base
1617 matched_kw_expr matched_kw_comma matched_kw_base
@@ -142,16 +143,16 @@ matched_op_expr -> comp_expr_op matched_expr : { '$1', '$2' }.
142143
143144block_expr -> parens_call call_args_parens do_block : build_identifier ('$1' , '$2' ++ '$3' ).
144145block_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' ).
146147block_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' ).
148149
149150fn_expr -> fn_eol stab end_eol : build_fn ('$1' , build_stab (lists :reverse ('$2' ))).
150151fn_expr -> call_expr : '$1' .
151152
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' ).
155156call_expr -> dot_punctuated_identifier : build_identifier ('$1' , []).
156157call_expr -> dot_do_identifier : build_identifier ('$1' , nil ).
157158call_expr -> var : build_identifier ('$1' , nil ).
@@ -388,6 +389,11 @@ parens_call -> matched_expr dot_call_op : { '.', [{line,?line('$2')}], ['$1'] }.
388389matched_comma_expr -> matched_expr : ['$1' ].
389390matched_comma_expr -> matched_comma_expr ',' matched_expr : ['$3' |'$1' ].
390391
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+
391397call_args_no_parens -> matched_comma_expr : lists :reverse ('$1' ).
392398call_args_no_parens -> matched_kw_base : ['$1' ].
393399call_args_no_parens -> matched_comma_expr ',' matched_kw_base : lists :reverse (['$3' |'$1' ]).
@@ -584,3 +590,13 @@ build_stab([H|T], Marker, Temp, Acc) ->
584590build_stab ([], Marker , Temp , Acc ) ->
585591 H = { Marker , build_block (lists :reverse (Temp )) },
586592 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