Commit Graph

181 Commits (1041f205ea245b289b6f8e81655eda398d94a02f)

Author SHA1 Message Date
Houtan Bastani 8da3dc5c6b
macro processor: add noexcept to functions 2019-08-21 18:25:08 +02:00
Houtan Bastani 48466f0e10
macro processor: remove double evaluations of ExpressionPtr 2019-08-21 18:07:40 +02:00
Houtan Bastani 92f18f58f5
macro processor: comment If class 2019-08-21 18:04:09 +02:00
Houtan Bastani cfc7a1467b
macro processor: fix error message 2019-08-20 15:21:41 +02:00
Houtan Bastani 6e523aaf28
macro processor: add immutable Range class, making Array immutable 2019-08-20 15:21:41 +02:00
Houtan Bastani 6c72980580
macro processor: replace uses of make_pair 2019-08-20 14:29:44 +02:00
Houtan Bastani 16080f2bb8
macro processor: make Variable class immutable 2019-08-20 11:16:33 +02:00
Houtan Bastani b3ec807b90
macro processor: move changes from `cd99bb3af9c8ef6fd881fa0457121894f8edd14e` to the header file 2019-08-19 18:31:18 +02:00
Houtan Bastani cd99bb3af9
macro processor: Make @#include and @#includepath immutable 2019-08-19 18:20:53 +02:00
Houtan Bastani b77f6ecd94
macro processor: add `defined` operator 2019-08-19 15:14:51 +02:00
Houtan Bastani 8ebd2a1735
macro processor: support `@#elseif` directive 2019-08-19 15:14:43 +02:00
Sébastien Villemot 75b000a0b5
Macro processor: ensure that all read-accessors return a const reference
Useless copies are thus avoided in some situations.
2019-08-14 17:36:10 +02:00
Sébastien Villemot 8c1e48a09e
Add a few more calls to std::move() 2019-08-14 17:27:31 +02:00
Sébastien Villemot c4f331c74c
Macro processor: make more node classes immutable
Since the node classes are stored and copied as std::shared_ptr, a given class
instance can actually be shared by two different expressions. Hence, in order
to prevent weird bugs, it’s necessary to make these classes immutable.

This commit deals with the easy cases.

The remaining (and more complex) ones are:
— Variable
— Array
— Include
— IncludePath
2019-08-14 17:14:42 +02:00
Sébastien Villemot 46a7cf5db7
Macro processor: fix the use of move semantics in constructor
In particular, remove the const keyword before arguments passed-by-value,
because otherwise they can't be moved (since they are immutable).

Also add a few missing calls to std::move(), and remove some calls to
std::move() when they are useless (on class enums, which are fundamental
types.)
2019-08-14 16:43:45 +02:00
Sébastien Villemot 37e7a6d1c1
Now that we require Bison ≥ 3.2, the stack.hh and position.hh files are no longer generated 2019-08-14 15:36:31 +02:00
Sébastien Villemot ecad2dfb10
Avoid running bison and flex multiple times when doing parallel builds 2019-08-14 11:22:33 +02:00
Sébastien Villemot 30aaf93ca7
Bison 3.2 now generates a default semantic action with variants
The minimal required version of Bison is bumped to 3.2, so that we can rely on
those default actions.
2019-08-14 11:22:33 +02:00
Houtan Bastani 2c6a290fb3
remove unnecessary declaration 2019-08-13 13:17:08 -04:00
Houtan Bastani bb13b93d59
aesthetic fix 2019-08-13 12:37:34 -04:00
Sébastien Villemot 5960a9168c
Macro processor: fix the shift/reduce conflict related to ternary colon operator
The idea is to split the expression rule into smaller subrules, hierarchically
organized according to the operator precedence (Bison still does part of the
job of dealing with precedence).
2019-08-13 18:17:14 +02:00
Houtan Bastani 321f70df21
macro processor: consolidate precedence rules around unary +/- and casting 2019-08-12 16:57:39 -04:00
Houtan Bastani 273c54f7fb
macro processor: introduce functions to test types of variables and literals 2019-08-07 14:16:15 -04:00
Houtan Bastani d35f2609fe
macro processor: implement `isempty` 2019-08-07 11:59:14 -04:00
Houtan Bastani eeb5600845
more changes missed in `309326c372b140d4e6e459b2139d957c246c6512` 2019-08-07 10:48:25 -04:00
Houtan Bastani 00172ec10b
change missed in `309326c372b140d4e6e459b2139d957c246c6512` 2019-08-07 10:44:11 -04:00
Houtan Bastani 309326c372
macro processor: change name of Double type to Real 2019-08-07 10:37:35 -04:00
Houtan Bastani ddd4361887
macro processor: remove unnecessary `std` namespace specifier 2019-08-06 17:02:25 -04:00
Houtan Bastani fcb1982de8
macro processor: only allow conversion to boolean from strings that precisely contain numeric values or true or false 2019-08-06 17:01:10 -04:00
Houtan Bastani 86538bed1c
macro processor: only allow conversion to double from strings that precisely contain numeric values 2019-08-06 14:48:55 -04:00
Houtan Bastani 618bf7c987
macro processor: remove cast to int 2019-08-06 14:10:11 -04:00
Houtan Bastani 72c216fd7c
macro processor: fix error messages 2019-08-06 11:31:56 -04:00
Houtan Bastani b3798a0baa
macro processor: introduce bool casts 2019-08-05 16:30:29 -04:00
Houtan Bastani eaa8b8fa84
macro processor: introduce array casts 2019-08-02 17:00:23 -04:00
Houtan Bastani 2b1eedd132
macro processor: introduce tuple casts 2019-08-02 16:56:01 -04:00
Houtan Bastani 7e085855b3
macro processor: introduce string casts 2019-08-02 15:19:00 -04:00
Houtan Bastani 5442512904
macro processor: introduce double casts 2019-08-02 15:03:05 -04:00
Houtan Bastani 5fc83fad29
macro processor: introduce integer casts 2019-08-02 14:53:24 -04:00
Houtan Bastani 4a3423f74f
macro processor: fix typos 2019-08-02 14:34:50 -04:00
Houtan Bastani 866e4d6d39
macro processor: introduce colon operator with three args
This introduces a shift/reduce compilation warning in the macro processor because at expr COLON expr . COLON expr the parser doesn’t know whether to shift or reduce
2019-07-15 16:29:04 -04:00
Houtan Bastani 1562016389 macro processor: handle case of functions without arguments 2019-06-27 16:47:48 +02:00
Houtan Bastani 06b835c2e0 aesthetic changes 2019-06-27 14:27:59 +02:00
Houtan Bastani 63b2117587 macro processor: remove unnecessary includes 2019-06-27 13:57:19 +02:00
Houtan Bastani 8b19565372 macro processor: prefer superfluous parenthesis when printing than printing with incorrect precedence 2019-06-27 11:48:03 +02:00
Houtan Bastani bde7c47117 macro processor: combine comprehension classes 2019-06-27 11:44:51 +02:00
Houtan Bastani 6686344acb
fix typos introduced in 68789da6a1 2019-06-25 17:02:26 +02:00
Houtan Bastani 68789da6a1
macro processor: aesthetic changes 2019-06-25 16:52:17 +02:00
Houtan Bastani d5f728c0a3
macro processor: support array comprehension 2019-06-25 16:50:26 +02:00
Houtan Bastani 2bd6282aef
Revert "macro processor: support array comprehension" (should not have been pushed yet)
This reverts commit f2c93d377f.
2019-06-25 12:14:03 +02:00
Houtan Bastani b041cb4fba
macro processor: remove unnecessary function 2019-06-25 12:12:34 +02:00
Houtan Bastani f2c93d377f
macro processor: support array comprehension 2019-06-25 11:15:15 +02:00
Houtan Bastani cd9dfa64cb
macro processor: inline function 2019-06-25 11:14:00 +02:00
Houtan Bastani e5121176a9
fix typo/aesthetic fixes 2019-06-24 16:55:36 +02:00
Houtan Bastani 4c6032895d
macro processor: fix bug in indexing of strings/arrays 2019-06-24 15:57:00 +02:00
Houtan Bastani b8205a49df
Revert "macro processor: allow @#includepath to accept a colon-separated list of paths"
This reverts commit 12b09073e3.
2019-06-24 14:39:35 +02:00
Houtan Bastani 12b09073e3
macro processor: allow @#includepath to accept a colon-separated list of paths 2019-06-24 12:20:48 +02:00
Houtan Bastani 6cf9a410d0
macro processor: oblige parens for tuple passed as variable in for loop 2019-06-24 11:58:55 +02:00
Houtan Bastani a3e63101f4
support `save` option of @#echomacrovars 2019-06-24 11:06:31 +02:00
Houtan Bastani f400f02432
aesthetic changes 2019-06-24 10:09:37 +02:00
Houtan Bastani ef62bc6c50
add suppression missed in 5ba2d8500a 2019-06-21 17:08:58 +02:00
Houtan Bastani 5ba2d8500a
suppress macro processor compilation warnings with gcc 2019-06-21 17:07:10 +02:00
Houtan Bastani 17e040f3f6
macro processor 2.0 2019-06-21 16:45:17 +02:00
Sébastien Villemot 1907249fac
Ask GCC to warn about C-style casts (-Wold-style-cast)
Adapt the code accordingly.
2019-04-23 12:54:11 +02:00
Sébastien Villemot 1fee4840b6
More Unicode copyright symbol 2019-04-16 14:29:30 +02:00
Sébastien Villemot b73d554ad2
Use Unicode copyright symbol (in UTF-8 encoding) 2019-04-16 11:35:31 +02:00
Houtan Bastani dfca3c5933
macroprocessor: fix bug: when macro variables were defined on the command line the resulting .mod file had newlines inserted at the top, resulting in incorrect line numbers when errors were encountered 2019-04-10 15:33:55 +02:00
Houtan Bastani 2a9c4b234a
maintain order of macro variables defined on command line when writing them to the .mod file
Before this commit, a dynare call such as
```
dynare <<mod file>> -Db=“A” -Da=@{b}
```
would not expand the value of `b` in `a` whereas
```
dynare <<mod file>> -Da=“A” -Db=@{a}
```
would expand the value of `a` into `b` because the arguments were stored in a map which printed the `@#define` statements in the .mod file in alphabetic order.
2019-04-10 12:51:45 +02:00
Sébastien Villemot 8a41a75c85
Apply modernize-raw-string-literal from clang-tidy
Use ReplaceShorterLiterals option to enforce replacement of all strings.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-raw-string-literal.html
2019-04-03 16:45:52 +02:00
Sébastien Villemot bd7a1f4b44
Minor simplifications in the lexers
In particular, no need to put both upper and lower case letters in the
patterns, since the lexer is case-insensitive.

The only simplification that we do not perform is removing the quoting of
single quotes (i.e. replacing \' by '), since it confuses the C++ mode of
Emacs.
2019-03-06 13:58:22 +01:00
Sébastien Villemot 5784dce1ca
Remove the possibility of passing the mod-file as a string in the first shell argument
This feature is ill-designed and no longer needed by the GUI. And is not very
useful: it is not possible to interact with the preprocessor without using the
filesystem, since the preprocessor creates many files anyways.

If we really need to reimplement such a feature, it should rather be redesigned
by reading the modfile from standard input (cin). That could be triggered by
using "-" as the filename argument (as is already done by several standard Unix
utilities).
2018-12-20 17:08:05 +01:00
Sébastien Villemot fb883bbfb0
Small simplification of Bison file
Thanks to Akim Demaille for the suggestion.
2018-11-21 14:38:06 +01:00
Houtan Bastani 987465365c
Revert "macroprocessor: allow inline comments. closes #1550"
This reverts commit 17dd443341.
2018-11-15 12:34:05 +01:00
Houtan Bastani eca82834a1
Revert "Fix parsing of empty strings in macro-processor"
This reverts commit 158f027db2.
2018-11-15 12:33:59 +01:00
Houtan Bastani 8e1cb261c5
Revert "only allow inline comments on statement lines. #4"
This reverts commit 3776e3b890.
2018-11-15 12:24:40 +01:00
Sébastien Villemot 1089a223c4 Clean up default constructors/destructors 2018-10-11 17:08:44 +02:00
Sébastien Villemot ac94ad906e Various fixes for silencing errors and warnings under Clang 6 2018-10-11 11:21:58 +02:00
Sébastien Villemot 6d26dc2349 Remove implicitly-defined copy/move constructors/assignments in several classes 2018-10-04 18:08:17 +02:00
Sébastien Villemot 7bb5382428 Always use brace-initializer in constructors
The syntax makes clearer the distinction between a function call and an
initialization. Also, it prevents bugs due to implicit type conversions.
2018-10-04 17:19:18 +02:00
Sébastien Villemot a4aefb4c65 Mark all constructors taking a single argument as "explicit"
For a rationale, see http://www.sjbrown.co.uk/2004/05/01/always-use-explicit/
2018-10-04 17:19:18 +02:00
Sébastien Villemot 913bc2f8c2 Macro-processor, comprehension: fix error message, add comments 2018-09-24 18:17:28 +02:00
Sébastien Villemot 3e5c8dd80d Macro-processor: implement comprehensions
Due to a limitation of the current implementation, this breaks syntaxes like
[ (i,j) ] (but not [ (2,j) ]; the problem only occurs when an array is
constructed by specifying as first element a tuple whose first element is a
variable name). Solving this problem requires an overhaul of the
macro-processor, with construction of ASTs at parsing time, and evaluation
later on (instead of doing on-the-fly evaluation).

Ref #5
2018-09-24 18:00:59 +02:00
Sébastien Villemot 7a5cc7e54b Minor fixes to comments 2018-09-18 19:12:25 +02:00
Sébastien Villemot e3550a8fc0 Various fixes in comments 2018-09-04 17:28:47 +02:00
Sébastien Villemot 3fd6858fb8 Macroprocessor: fix priority of operators
- == and != have now lower priority than <= < >= >, for consistency with the
  Dynare modelling language (and incidentally C and C++, but not Julia).

- ^ has now higher priority and no associativity, for consistency with the
  Dynare modelling language (and usual arithmetic notation).

- & has now higher priority than |, and both have lower priority than + and -,
  but higher than inequality comparators. This is not the same as C and C++ (in
  which & and | are just above && and ||), but this allows for expressions such
  as "a|b == c" to have their most natural semantics (i.e. this will compare
  the union of a and b with c; the C/C++ priority level would have resulted in
  a type error).

Ref #5.
2018-09-04 17:09:11 +02:00
Sébastien Villemot 4624a3104d Macroprocessor: implement power operator for integers
For consistency with the power operator for sets (see #5).
2018-09-04 16:28:38 +02:00
Houtan Bastani 52da3ecfa7 fix bug: missing initialization for lexer context variable 2018-08-29 18:02:12 +02:00
Houtan Bastani d657f77149 fix typo :) 2018-08-09 13:27:05 +02:00
Houtan Bastani 719630a53c macroprocessor: allow looping over tuples. #5 2018-08-08 17:23:33 +02:00
Houtan Bastani ca066ea398 macroprocessor: introduce shortcut for Cartesion product (^). #5 2018-08-08 15:58:49 +02:00
Houtan Bastani d9c0568075 macroprocessor: introduce Cartesion product. #5 2018-08-08 15:11:06 +02:00
Houtan Bastani 27d088da7e macroprocessor: fix bug in set difference introduced in 5f1465f9 2018-08-08 14:35:09 +02:00
Houtan Bastani 428b5023d3 macroprocessor: intersection operator. #5 2018-08-08 14:15:39 +02:00
Houtan Bastani 039b27bbaf macroprocessor: union operator. #5 2018-08-08 14:12:04 +02:00
Houtan Bastani 1285473aa1 macroprocessor: introduce tuple type. #5 2018-08-07 17:36:13 +02:00
Houtan Bastani 88a0162202 macroprocessor: remove terminals not used in grammar 2018-08-07 17:19:45 +02:00
Sébastien Villemot 66a712253a Macroprocessor: cosmetic change 2018-07-31 12:02:26 +02:00
Sébastien Villemot df01e52859 Use new syntax for various Bison options 2018-07-31 12:02:26 +02:00
Sébastien Villemot 4302307f7d Force Emacs to use C++ mode when opening Bison and Flex files 2018-07-31 12:02:24 +02:00
Sébastien Villemot 107ad1432b Fix various Bison warnings 2018-07-30 19:38:46 +02:00
Sébastien Villemot 9cf3e034de Macroprocessor: allow empty arrays
This is now easy to implement, thanks to the refactoring allowing any type of
objects in arrays.

Closes DynareTeam/dynare#707
2018-07-25 18:46:55 +02:00