Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
2011-Simplify-erl_parse.yrl-using-operator-prec...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2011-Simplify-erl_parse.yrl-using-operator-precedence.patch of Package erlang
From 17d8d9d39f8cc68aff6f1708168c9815e18c39b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Muska=C5=82a?= <micmus@whatsapp.com> Date: Fri, 3 Apr 2020 06:56:26 -0700 Subject: [PATCH] Simplify erl_parse.yrl using operator precedence --- lib/stdlib/src/erl_parse.yrl | 170 +++++++++++++---------------------- 1 file changed, 63 insertions(+), 107 deletions(-) diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl index 8c7e27fc5b..143aa31088 100644 --- a/lib/stdlib/src/erl_parse.yrl +++ b/lib/stdlib/src/erl_parse.yrl @@ -26,12 +26,8 @@ form attribute attr_val function function_clauses function_clause clause_args clause_guard clause_body -expr expr_100 expr_150 expr_160 expr_200 expr_300 expr_400 expr_500 -expr_600 expr_650 expr_700 expr_800 -expr_max -pat_expr pat_expr_200 pat_expr_300 pat_expr_400 pat_expr_500 -pat_expr_600 pat_expr_650 pat_expr_700 pat_expr_800 -pat_expr_max map_pat_expr record_pat_expr +expr expr_max expr_remote +pat_expr pat_expr_max map_pat_expr record_pat_expr pat_argument_list pat_exprs list tail list_comprehension lc_expr lc_exprs @@ -48,11 +44,11 @@ atomic strings prefix_op mult_op add_op list_op comp_op binary bin_elements bin_element bit_expr opt_bit_size_expr bit_size_expr opt_bit_type_list bit_type_list bit_type -top_type top_type_100 top_types type typed_expr typed_attr_val -type_sig type_sigs type_guard type_guards fun_type fun_type_100 binary_type +top_type top_types type typed_expr typed_attr_val +type_sig type_sigs type_guard type_guards fun_type binary_type type_spec spec_fun typed_exprs typed_record_fields field_types field_type map_pair_types map_pair_type -bin_base_type bin_unit_type type_200 type_300 type_400 type_500. +bin_base_type bin_unit_type. Terminals char integer float atom string var @@ -74,6 +70,27 @@ Expect 0. Rootsymbol form. +%% Expressions + +Unary 0 'catch'. +Right 100 '=' '!'. +Right 150 'orelse'. +Right 160 'andalso'. +Nonassoc 200 comp_op. +Right 300 list_op. +Left 400 add_op. +Left 500 mult_op. +Unary 600 prefix_op. +Nonassoc 700 '#'. +Nonassoc 800 ':'. + +%% Types + +Right 150 '::'. +Left 170 '|'. +Nonassoc 200 '..'. +Nonassoc 500 '*'. % for binary expressions + form -> attribute dot : '$1'. form -> function dot : '$1'. @@ -117,25 +134,14 @@ type_guard -> var '::' top_type : build_constraint('$1', '$3'). top_types -> top_type : ['$1']. top_types -> top_type ',' top_types : ['$1'|'$3']. -top_type -> var '::' top_type_100 : {ann_type, ?anno('$1'), ['$1','$3']}. -top_type -> top_type_100 : '$1'. - -top_type_100 -> type_200 : '$1'. -top_type_100 -> type_200 '|' top_type_100 : lift_unions('$1','$3'). - -type_200 -> type_300 '..' type_300 : {type, ?anno('$1'), range, - ['$1', '$3']}. -type_200 -> type_300 : '$1'. - -type_300 -> type_300 add_op type_400 : ?mkop2('$1', '$2', '$3'). -type_300 -> type_400 : '$1'. - -type_400 -> type_400 mult_op type_500 : ?mkop2('$1', '$2', '$3'). -type_400 -> type_500 : '$1'. - -type_500 -> prefix_op type : ?mkop1('$1', '$2'). -type_500 -> type : '$1'. +top_type -> var '::' top_type : {ann_type, ?anno('$1'), ['$1','$3']}. +top_type -> type '|' top_type : lift_unions('$1','$3'). +top_type -> type : '$1'. +type -> type '..' type : {type, ?anno('$1'), range, ['$1', '$3']}. +type -> type add_op type : ?mkop2('$1', '$2', '$3'). +type -> type mult_op type : ?mkop2('$1', '$2', '$3'). +type -> prefix_op type : ?mkop1('$1', '$2'). type -> '(' top_type ')' : '$2'. type -> var : '$1'. type -> atom : '$1'. @@ -160,13 +166,10 @@ type -> binary_type : '$1'. type -> integer : '$1'. type -> char : '$1'. type -> 'fun' '(' ')' : {type, ?anno('$1'), 'fun', []}. -type -> 'fun' '(' fun_type_100 ')' : '$3'. +type -> 'fun' '(' fun_type ')' : '$3'. -fun_type_100 -> '(' '...' ')' '->' top_type - : {type, ?anno('$1'), 'fun', +fun_type -> '(' '...' ')' '->' top_type : {type, ?anno('$1'), 'fun', [{type, ?anno('$1'), any}, '$5']}. -fun_type_100 -> fun_type : '$1'. - fun_type -> '(' ')' '->' top_type : {type, ?anno('$1'), 'fun', [{type, ?anno('$1'), product, []}, '$4']}. fun_type -> '(' top_types ')' '->' top_type @@ -223,48 +226,22 @@ clause_body -> '->' exprs: '$2'. expr -> 'catch' expr : {'catch',?anno('$1'),'$2'}. -expr -> expr_100 : '$1'. - -expr_100 -> expr_150 '=' expr_100 : {match,?anno('$2'),'$1','$3'}. -expr_100 -> expr_150 '!' expr_100 : ?mkop2('$1', '$2', '$3'). -expr_100 -> expr_150 : '$1'. - -expr_150 -> expr_160 'orelse' expr_150 : ?mkop2('$1', '$2', '$3'). -expr_150 -> expr_160 : '$1'. - -expr_160 -> expr_200 'andalso' expr_160 : ?mkop2('$1', '$2', '$3'). -expr_160 -> expr_200 : '$1'. - -expr_200 -> expr_300 comp_op expr_300 : - ?mkop2('$1', '$2', '$3'). -expr_200 -> expr_300 : '$1'. - -expr_300 -> expr_400 list_op expr_300 : - ?mkop2('$1', '$2', '$3'). -expr_300 -> expr_400 : '$1'. - -expr_400 -> expr_400 add_op expr_500 : - ?mkop2('$1', '$2', '$3'). -expr_400 -> expr_500 : '$1'. - -expr_500 -> expr_500 mult_op expr_600 : - ?mkop2('$1', '$2', '$3'). -expr_500 -> expr_600 : '$1'. - -expr_600 -> prefix_op expr_600 : - ?mkop1('$1', '$2'). -expr_600 -> expr_650 : '$1'. - -expr_650 -> map_expr : '$1'. -expr_650 -> expr_700 : '$1'. - -expr_700 -> function_call : '$1'. -expr_700 -> record_expr : '$1'. -expr_700 -> expr_800 : '$1'. - -expr_800 -> expr_max ':' expr_max : - {remote,?anno('$2'),'$1','$3'}. -expr_800 -> expr_max : '$1'. +expr -> expr '=' expr : {match,?anno('$2'),'$1','$3'}. +expr -> expr '!' expr : ?mkop2('$1', '$2', '$3'). +expr -> expr 'orelse' expr : ?mkop2('$1', '$2', '$3'). +expr -> expr 'andalso' expr : ?mkop2('$1', '$2', '$3'). +expr -> expr comp_op expr : ?mkop2('$1', '$2', '$3'). +expr -> expr list_op expr : ?mkop2('$1', '$2', '$3'). +expr -> expr add_op expr : ?mkop2('$1', '$2', '$3'). +expr -> expr mult_op expr : ?mkop2('$1', '$2', '$3'). +expr -> prefix_op expr : ?mkop1('$1', '$2'). +expr -> map_expr : '$1'. +expr -> function_call : '$1'. +expr -> record_expr : '$1'. +expr -> expr_remote : '$1'. + +expr_remote -> expr_max ':' expr_max : {remote,?anno('$2'),'$1','$3'}. +expr_remote -> expr_max : '$1'. expr_max -> var : '$1'. expr_max -> atomic : '$1'. @@ -281,36 +258,15 @@ expr_max -> receive_expr : '$1'. expr_max -> fun_expr : '$1'. expr_max -> try_expr : '$1'. -pat_expr -> pat_expr_200 '=' pat_expr : {match,?anno('$2'),'$1','$3'}. -pat_expr -> pat_expr_200 : '$1'. - -pat_expr_200 -> pat_expr_300 comp_op pat_expr_300 : - ?mkop2('$1', '$2', '$3'). -pat_expr_200 -> pat_expr_300 : '$1'. - -pat_expr_300 -> pat_expr_400 list_op pat_expr_300 : - ?mkop2('$1', '$2', '$3'). -pat_expr_300 -> pat_expr_400 : '$1'. - -pat_expr_400 -> pat_expr_400 add_op pat_expr_500 : - ?mkop2('$1', '$2', '$3'). -pat_expr_400 -> pat_expr_500 : '$1'. - -pat_expr_500 -> pat_expr_500 mult_op pat_expr_600 : - ?mkop2('$1', '$2', '$3'). -pat_expr_500 -> pat_expr_600 : '$1'. - -pat_expr_600 -> prefix_op pat_expr_600 : - ?mkop1('$1', '$2'). -pat_expr_600 -> pat_expr_650 : '$1'. - -pat_expr_650 -> map_pat_expr : '$1'. -pat_expr_650 -> pat_expr_700 : '$1'. - -pat_expr_700 -> record_pat_expr : '$1'. -pat_expr_700 -> pat_expr_800 : '$1'. - -pat_expr_800 -> pat_expr_max : '$1'. +pat_expr -> pat_expr '=' pat_expr : {match,?anno('$2'),'$1','$3'}. +pat_expr -> pat_expr comp_op pat_expr : ?mkop2('$1', '$2', '$3'). +pat_expr -> pat_expr list_op pat_expr : ?mkop2('$1', '$2', '$3'). +pat_expr -> pat_expr add_op pat_expr : ?mkop2('$1', '$2', '$3'). +pat_expr -> pat_expr mult_op pat_expr : ?mkop2('$1', '$2', '$3'). +pat_expr -> prefix_op pat_expr : ?mkop1('$1', '$2'). +pat_expr -> map_pat_expr : '$1'. +pat_expr -> record_pat_expr : '$1'. +pat_expr -> pat_expr_max : '$1'. pat_expr_max -> var : '$1'. pat_expr_max -> atomic : '$1'. @@ -405,7 +361,7 @@ map_field_exact -> map_key ':=' expr : map_key -> expr : '$1'. -%% N.B. This is called from expr_700. +%% N.B. This is called from expr. %% N.B. Field names are returned as the complete object, even if they are %% always atoms for the moment, this might change in the future. @@ -431,9 +387,9 @@ record_fields -> record_field ',' record_fields : ['$1' | '$3']. record_field -> var '=' expr : {record_field,?anno('$1'),'$1','$3'}. record_field -> atom '=' expr : {record_field,?anno('$1'),'$1','$3'}. -%% N.B. This is called from expr_700. +%% N.B. This is called from expr. -function_call -> expr_800 argument_list : +function_call -> expr_remote argument_list : {call,?anno('$1'),'$1',element(1, '$2')}. -- 2.26.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor