From 72025e38d9e8fb48d98b89cfb7c623b88adc6707 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Wed, 8 Mar 2017 17:11:23 +0100 Subject: [PATCH] improve AST of OpenACC --- Parser/spec/OpenAcc.rats | 231 +++++++++++++++++++-------------------- 1 file changed, 114 insertions(+), 117 deletions(-) diff --git a/Parser/spec/OpenAcc.rats b/Parser/spec/OpenAcc.rats index d9fe627..87ca2bd 100644 --- a/Parser/spec/OpenAcc.rats +++ b/Parser/spec/OpenAcc.rats @@ -32,6 +32,13 @@ List<Variable> var_list = } ; +List<Variable> p_var_list = + LPAREN vl:(COMMA yyValue:variable)* RPAREN + { + yyValue = new List().addAll(vl.list()); + } +; + List<Expr> expr_list = e:expr el:(COMMA yyValue:expr)* { @@ -42,12 +49,13 @@ List<Expr> expr_list = //// // An AccStmt does not have a label or a comment (unlike Fortran statements). //// // It must, however, begin with ""!$acc" and end with a line break //// abstract AccStmt ; +//// abstract AccAbstractDataStmt ::= AccClause* ; // constructs ------------------------------------------------------------------ //// abstract AccConstruct:ExecutableConstruct ; AccConstruct acc_construct = - acc_parallel_construct + acc_parallel_construct / acc_kernels_construct / acc_data_construct / acc_atomic_construct @@ -65,7 +73,7 @@ AccParallelConstruct acc_parallel_construct = } ; -//// AccParallelStmt:AccStmt ::= AccClause* ; +//// AccParallelStmt:AccAbstractDataStmt ; AccParallelStmt acc_parallel_stmt = A_P A_PARALLEL LB { @@ -96,7 +104,7 @@ AccKernelsConstruct acc_kernels_construct = } ; -//// AccKernelsStmt:AccStmt ::= AccClause* ; +//// AccKernelsStmt:AccAbstractDataStmt ; AccKernelsStmt acc_kernels_stmt = A_P A_KERNELS LB { @@ -127,7 +135,7 @@ AccDataConstruct acc_data_construct = } ; -//// AccDataStmt:AccStmt ::= AccClause* ; +//// AccDataStmt:AccAbstractDataStmt ; AccDataStmt acc_data_stmt = A_P A_DATA LB { @@ -296,7 +304,7 @@ AccParallelLoopConstruct acc_parallel_loop_construct = } ; -//// AccParallelLoopStmt:AccStmt ::= AccClause* ; +//// AccParallelLoopStmt:AccAbstractDataStmt ; AccParallelLoopStmt acc_parallel_loop_stmt = A_P A_PARALLEL A_LOOP LB { @@ -327,7 +335,7 @@ AccKernelsLoopConstruct acc_kernels_loop_construct = } ; -//// AccKernelsLoopStmt:AccStmt ::= AccClause* ; +//// AccKernelsLoopStmt:AccAbstractDataStmt ; AccKernelsLoopStmt acc_kernels_loop_stmt = A_P A_KERNELS A_LOOP LB { @@ -388,9 +396,9 @@ AccExitDataDirective acc_exit_data_directive = //// // ACC 2.10 //// AccCacheDirective:AccDirective ::= Variable* ; AccCacheDirective acc_cache_directive = - A_P A_CACHE LPAREN vl:var_list RPAREN LB + A_P A_CACHE list:p_var_list LB { - yyValue = new AccCacheDirective(new Opt<Label>(), new Comment(new Opt<CommentContent>()), vl); + yyValue = new AccCacheDirective(new Opt<Label>(), new Comment(new Opt<CommentContent>()), list); } ; @@ -471,19 +479,9 @@ List acc_clause_list = public AccClause acc_clause = acc_if_clause / acc_reduction_clause -/ acc_copy_clause -/ acc_copyin_clause -/ acc_copyout_clause -/ acc_create_clause -/ acc_delete_clause / acc_device_clause / acc_firstprivate_clause -/ acc_pcopy_clause -/ acc_pcopyin_clause -/ acc_pcopyout_clause -/ acc_pcreate_clause / acc_private_clause -/ acc_present_clause / acc_use_device_clause / acc_default_none_clause / acc_device_type_clause @@ -506,8 +504,95 @@ public AccClause acc_clause = / acc_bind_clause / acc_seq_clause / acc_shortloop_clause -/ acc_deviceptr_clause -/ acc_auto_clause +/ acc_auto_clause +/ acc_data_clause +; + +//// abstract AccDataClause:AccClause ::= Variable* ; +AccDataClause acc_data_clause = + acc_deviceptr_clause +/ acc_present_clause +/ acc_copy_clause +/ acc_copyin_clause +/ acc_copyout_clause +/ acc_create_clause +/ acc_delete_clause +; + +//// AccDeviceptrClause:AccDataClause ; +AccDeviceptrClause acc_deviceptr_clause = + A_DEVICEPTR list:p_var_list + { + yyValue = new AccDeviceptrClause(list); + } +; + +//// AccPresentClause:AccDataClause ; +AccPresentClause acc_present_clause = + A_PRESENT list:p_var_list + { + yyValue = new AccPresentClause(list); + } +; + +//// AccCopyClause:AccDataClause ; +//// AccPresentOrCopyClause:AccCopyClause ; +AccCopyClause acc_copy_clause = + A_COPY list:p_var_list + { + yyValue = new AccCopyClause(list); + } +/ (A_PCOPY / A_PRESENT_OR_COPY) list:p_var_list + { + yyValue = new AccPresentOrCopyClause(list); + } +; + +//// AccCopyInClause:AccDataClause ; +//// AccPresentOrCopyInClause:AccCopyClause ; +AccCopyInClause acc_copyin_clause = + A_COPYIN list:p_var_list + { + yyValue = new AccCopyInClause(list); + } +/ (A_PCOPYIN / A_PRESENT_OR_COPYIN) list:p_var_list + { + yyValue = new AccPresentOrCopyInClause(list); + } +; + +//// AccCopyOutClause:AccDataClause ; +//// AccPresentOrCopyOutClause:AccCopyClause ; +AccCopyOutClause acc_copyin_clause = + A_COPYOUT list:p_var_list + { + yyValue = new AccCopyOutClause(list); + } +/ (A_PCOPYOUT / A_PRESENT_OR_COPYOUT) list:p_var_list + { + yyValue = new AccPresentOrCopyOutClause(list); + } +; + +//// AccCreateClause:AccDataClause ; +//// AccPresentOrCreateClause:AccCreateClause ; +AccCreateClause acc_create_clause = + A_CREATE list:p_var_list + { + yyValue = new AccCreateClause(list); + } +/ (A_PCREATE / A_PRESENT_OR_CREATE) list:p_var_list + { + yyValue = new AccPresentOrCreateClause(list); + } +; + +//// AccDeleteClause:AccDataClause ; +AccDeleteClause acc_delete_clause = + A_DELETE list:p_var_list + { + yyValue = new AccDeleteClause(list); + } ; //// AccIfClause:AccClause ::= Condition:Expr ; @@ -560,65 +645,9 @@ AccOperator acc_operator = / A_NEQV { yyValue = new AccOperatorNEqv(); } ; -//// AccDeviceptrClause:AccClause ::= Variable* ; -AccDeviceptrClause acc_deviceptr_clause = - A_DEVICEPTR LPAREN list:var_list RPAREN - { - yyValue = new AccDeviceptrClause(list); - } -; - -//// AccCopyClause:AccClause ::= Variable* ; -AccCopyClause acc_copy_clause = - A_COPY LPAREN list:var_list RPAREN - { - yyValue = new AccCopyClause(list); - } -; - -//// AccCopyInClause:AccClause ::= Variable* ; -AccCopyInClause acc_copyin_clause = - A_COPYIN LPAREN list:var_list RPAREN - { - yyValue = new AccCopyInClause(list); - } -; - -//// AccCopyOutClause:AccClause ::= Variable* ; -AccCopyOutClause acc_copyout_clause = - A_COPYOUT LPAREN list:var_list RPAREN - { - yyValue = new AccCopyOutClause(list); - } -; - -//// AccCreateClause:AccClause ::= Variable* ; -AccCreateClause acc_create_clause = - A_CREATE LPAREN list:var_list RPAREN - { - yyValue = new AccCreateClause(list); - } -; - -//// AccDeleteClause:AccClause ::= Variable* ; -AccDeleteClause acc_delete_clause = - A_DELETE LPAREN list:var_list RPAREN - { - yyValue = new AccDeleteClause(list); - } -; - -//// AccPresentClause:AccClause ::= Variable* ; -AccPresentClause acc_present_clause = - A_PRESENT LPAREN list:var_list RPAREN - { - yyValue = new AccPresentClause(list); - } -; - //// AccDeviceClause:AccClause ::= Variable* ; AccDeviceClause acc_device_clause = - A_DEVICE LPAREN list:var_list RPAREN + A_DEVICE list:p_var_list { yyValue = new AccDeviceClause(list); } @@ -626,47 +655,15 @@ AccDeviceClause acc_device_clause = //// AccFirstPrivateClause:AccClause ::= Variable* ; AccFirstPrivateClause acc_firstprivate_clause = - A_FIRSTPRIVATE LPAREN list:var_list RPAREN + A_FIRSTPRIVATE list:p_var_list { yyValue = new AccFirstPrivateClause(list); } ; -//// AccPresentOrCopyClause:AccClause ::= Variable* ; -AccPresentOrCopyClause acc_pcopy_clause = - (A_PCOPY / A_PRESENT_OR_COPY) LPAREN list:var_list RPAREN - { - yyValue = new AccPresentOrCopyClause(list); - } -; - -//// AccPresentOrCopyInClause:AccClause ::= Variable* ; -AccPresentOrCopyInClause acc_pcopyin_clause = - (A_PCOPYIN / A_PRESENT_OR_COPYIN) LPAREN list:var_list RPAREN - { - yyValue = new AccPresentOrCopyInClause(list); - } -; - -//// AccPresentOrCopyOutClause:AccClause ::= Variable* ; -AccPresentOrCopyOutClause acc_pcopyout_clause = - (A_PCOPYOUT / A_PRESENT_OR_COPYOUT) LPAREN list:var_list RPAREN - { - yyValue = new AccPresentOrCopyOutClause(list); - } -; - -//// AccPresentOrCreateClause:AccClause ::= Variable* ; -AccPresentOrCreateClause acc_pcreate_clause = - (A_PCREATE / A_PRESENT_OR_CREATE) LPAREN list:var_list RPAREN - { - yyValue = new AccPresentOrCreateClause(list); - } -; - //// AccPrivateClause:AccClause ::= Variable* ; AccPrivateClause acc_private_clause = - A_PRIVATE LPAREN list:var_list RPAREN + A_PRIVATE list:p_var_list { yyValue = new AccPrivateClause(list); } @@ -674,7 +671,7 @@ AccPrivateClause acc_private_clause = //// AccUseDeviceClause:AccClause ::= Variable* ; AccUseDeviceClause acc_use_device_clause = - A_USEDEVICE LPAREN list:var_list RPAREN + A_USEDEVICE list:p_var_list { yyValue = new AccUseDeviceClause(list); } @@ -696,7 +693,7 @@ AccDeviceTypeClause acc_device_type_clause = { yyValue = new AccDeviceTypeStarClause(); } -/ (A_DEVICE_TYPE / A_DTYPE) LPAREN list:var_list RPAREN +/ (A_DEVICE_TYPE / A_DTYPE) list:p_var_list { yyValue = new AccDeviceTypeListClause(list); } @@ -761,7 +758,7 @@ AccVectorLengthClause acc_vector_length_clause = //// AccSelfClause:AccClause ::= Variable* ; AccSelfClause acc_self_clause = - A_SELF LPAREN list:var_list RPAREN + A_SELF list:p_var_list { yyValue = new AccSelfClause(list); } @@ -769,7 +766,7 @@ AccSelfClause acc_self_clause = //// AccHostClause:AccClause ::= Variable* ; AccHostClause acc_host_clause = - A_HOST LPAREN list:var_list RPAREN + A_HOST list:p_var_list { yyValue = new AccHostClause(list); } @@ -846,7 +843,7 @@ AccVectorClause acc_vector_clause = //// AccDeviceResidentClause:AccClause ::= Variable* ; AccDeviceResidentClause acc_device_resident_clause = - A_DEVICE_RESIDENT LPAREN list:var_list RPAREN + A_DEVICE_RESIDENT list:p_var_list { yyValue = new AccDeviceResidentClause(list); } @@ -854,7 +851,7 @@ AccDeviceResidentClause acc_device_resident_clause = //// AccLinkClause:AccClause ::= Variable* ; AccLinkClause acc_link_clause = - A_LINK LPAREN list:var_list RPAREN + A_LINK list:p_var_list { yyValue = new AccLinkClause(list); } -- GitLab