Commit Graph

69 Commits (69f2f1ca8827944ca81aa784f086d95038511ab4)

Author SHA1 Message Date
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
Sébastien Villemot 88fab669c6 Macroprocessor: length() operator called on a string returns the number of characters
Closes DynareTeam/Dynare#1547
2018-07-25 18:42:23 +02:00
Sébastien Villemot 5f1465f9d1 Macroprocessor: replace naked pointers by smart pointers
- use std::unique_ptr for MacroDriver::lexer
- use std::shared_ptr for MacroValue objects constructed by the parser
  This is made possible using Bison 3.0 variant value type.
  Using non-pointer type is not possible since MacroValue is polymorphic.
  Using std::unique_ptr is not possible since the value type must be
  copyable (see
  https://lists.gnu.org/archive/html/bug-bison/2015-03/msg00004.html).
  Define a new type MacroValuePtr == shared_ptr<const MacroValue> for code
  clarity.
  Use the following convention for shared_ptr arguments to functions:
  + if pass-by-value, means that the callee acquires ownership
  + if pass-by-const-reference, the callee does not acquire ownership
- naked pointers are still used for tracking the filename in Bison's location
  type, since we don't have control over that

Also, by the way:
- arrays can now contain elements of any type
- simplify MacroDriver::loop_stack using std::tuple
- toArray() method now fails on function objects
- no need to use const qualifiers, since all MacroValue objects are immutable
- use an exception for detecting division by zero
2018-07-25 18:40:23 +02:00
Sébastien Villemot 372005ed27 Bison: use the %language directive instead of %skeleton for specifying C++ 2018-07-24 14:02:10 +02:00
Sébastien Villemot 937659747a Macroprocessor: error out when length() operator called on a string or an int
Closes DynareTeam/Dynare#1547
2018-07-24 12:49:08 +02:00
Houtan Bastani 8cf4fedac2 macroprocessor: change type of function arguments 2018-07-11 15:57:51 +02:00
Houtan Bastani 3776e3b890 only allow inline comments on statement lines. #4 2018-07-11 14:31:58 +02:00
Houtan Bastani aea9011745 Revert "macroprocessor: don’t interpret inline comments yet put them to output (ignored by dynare preprocessor, but printed in macro expanded file). #4"
This reverts commit 27e6d92af1.
2018-07-11 12:15:58 +02:00
Houtan Bastani 357320468b Revert "macroprocessor: support Matlab comments. #4"
This reverts commit 066942ef22.
2018-07-11 11:37:58 +02:00
Houtan Bastani a2fef7804e Revert "macroprocessor: support multi-line comments. #4"
This reverts commit 86a08f54ae.
2018-07-11 11:37:40 +02:00
Houtan Bastani 86a08f54ae macroprocessor: support multi-line comments. #4 2018-07-09 16:55:59 +02:00
Houtan Bastani 066942ef22 macroprocessor: support Matlab comments. #4 2018-07-09 16:55:53 +02:00
Houtan Bastani 27e6d92af1 macroprocessor: don’t interpret inline comments yet put them to output (ignored by dynare preprocessor, but printed in macro expanded file). #4 2018-07-09 16:55:38 +02:00