diff --git a/doc/dynare.texi b/doc/dynare.texi index 9788781bc232616da55a9a7041b8911e274652d4..5c849fd52975a5afed95c9b735edc209d5075ab5 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -10587,8 +10587,8 @@ strings. It is possible to construct macro-expressions which can be assigned to macro-variables or used within a macro-directive. The expressions are -constructed using literals of the four basic types (integers, strings, -arrays of strings, arrays of integers), macro-variables names and +constructed using literals of five basic types (integers, strings, arrays of +strings, arrays of integers, and string functions), macro-variable names, and standard operators. String literals have to be enclosed between @strong{double} quotes @@ -10651,6 +10651,14 @@ getting the length of an array: @code{length} operator (for example: @code{[1,2,3]}) @end itemize +The following operators can be used on string functions: +@itemize +@item +comparison operators: @code{==}, @code{!=} +@item +concatenation of two strings: @code{+} +@end itemize + Macro-expressions can be used at two places: @itemize @item @@ -10706,16 +10714,18 @@ file will be searched for in the folders provided by @ref{-I} and @end deffn @deffn {Macro directive} @@#define @var{MACRO_VARIABLE} = @var{MACRO_EXPRESSION} -Defines a macro-variable. +Defines a macro-variable or macro-function @customhead{Example 1} @example -@@#define x = 5 // Integer -@@#define y = "US" // String -@@#define v = [ 1, 2, 4 ] // Integer array -@@#define w = [ "US", "EA" ] // String array -@@#define z = 3 + v[2] // Equals 5 -@@#define t = ("US" in w) // Equals 1 (true) +@@#define x = 5 // Integer +@@#define y = "US" // String +@@#define v = [ 1, 2, 4 ] // Integer array +@@#define w = [ "US", "EA" ] // String array +@@#define z = 3 + v[2] // Equals 5 +@@#define t = ("US" in w) // Equals 1 (true) +@@#define f(x) = " + @@@{x@} + @@@{y@}" // Defines a function 'f' with argument 'x' + // that returns the string: ' + @@@{x@} + US' @end example @customhead{Example 2} @@ -10723,15 +10733,16 @@ Defines a macro-variable. @example @@#define x = [ "B", "C" ] @@#define i = 2 +@@#define f(x) = " + @@@{x@}" model; - A = @@@{x[i]@}; + A = @@@{x[i] + f("D")@}; end; @end example is strictly equivalent to: @example model; - A = C; + A = C + D; end; @end example diff --git a/preprocessor b/preprocessor index e376267a2867aff79989503f77a2fd2204ed9c8b..244552393baec541e0d02a2c378a21a6c9409989 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit e376267a2867aff79989503f77a2fd2204ed9c8b +Subproject commit 244552393baec541e0d02a2c378a21a6c9409989