Printer - Maple Programming Help

Home : Support : Online Help : Programming : Code Generation Package : Language Definition : Printer : CodeGeneration/LanguageDefinition/Printer/AddType

Printer

 add a type to Printer module
 GetType
 get a type from a Printer module

 Calling Sequence Printer:-AddType(typename = translation) Printer:-GetType(typename)

Parameters

 Printer - Printer module typename - type supported by CodeGeneration translation - string or table; translation for type in target language

Description

 • The AddType command defines the translation for the type typename in the target language with which Printer is associated. This is commonly used in the printing of Coercion and Declaration intermediate code structures.
 • If translation is a table, its indices must be the allowed precisions for typename in this target language. The table entry corresponding to the current precision (set by the precision option) for the type typename is used as the translation for typename.
 • The GetType command returns the translation for type typename in the target language.

Examples

 > $\mathrm{with}\left(\mathrm{CodeGeneration}\right):$
 > $\mathrm{LanguageDefinition}[\mathrm{Define}]\left("TypeExample",\mathrm{extend}="C",\mathrm{AddType}\left('\mathrm{integer}'="custom_int"\right),\mathrm{AddType}\left('\mathrm{numeric}'=\mathrm{table}\left(\left['\mathrm{single}'="custom_float_single",'\mathrm{double}'="custom_float_double"\right]\right)\right),\mathrm{AddFunction}\left("f",\left[\mathrm{integer}\right]::\mathrm{integer},"f_equiv"\right)\right):$
 > p1 := proc(x,y) local a; a := 2*f(x); 3.0*a*y;end proc:

Translate $\mathrm{p1}$ to language $\mathrm{TypeExample}$. Notice that the type integer is translated to custom_int while the type numeric is translated to custom_float_double.

 > $\mathrm{Translate}\left(\mathrm{p1},\mathrm{language}="TypeExample"\right)$
 custom_float_double p1 (custom_int x, custom_float_double y) {   custom_int a;   a = 2 * f_equiv(x);   return(0.30e1 * (custom_float_double) a * y); }

Same as previous, but force translation of type numeric as custom_float_single by including the option precision = single.

 > $\mathrm{Translate}\left(\mathrm{p1},\mathrm{language}="TypeExample",\mathrm{precision}=\mathrm{single}\right)$
 custom_float_single p1 (custom_int x, custom_float_single y) {   custom_int a;   a = 2 * f_equiv(x);   return(0.30e1 * (custom_float_single) a * y); }