Research Article

SPOT: A DSL for Extending Fortran Programs with Metaprogramming

Algorithm 5

(a) A rule in the tree grammar; (b) a template for generating OpenFortran code.
(a)
transformScope
: (Within’   ‘Project’   programName=ID)
-> createMetaGlobal (transformer={$transformerName}, progName={$programName.text});
(b)
createMetaGlobal (transformer, progName, funName, varName)::=<<
class MetaClass_<transformer>_<progName>: public MetaGlobal
{
public:
MetaClass_<transformer>_<progName> (string name);
virtual bool ofExtendDefinition();
<if(funName)>virtual bool ofExtendFunctionCall(string <funName>)<endif>;
<if(VarName)>virtual bool ofExtendVariableRead(string <varName>)<endif>;
<if(VarName)>virtual bool ofExtendVariableRead(string <varName>)<endif>;
};
>>