fix precedence of uminus in operation 04/16504/2
Pierre-Aime Agnel [Thu, 21 May 2015 09:18:34 +0000 (11:18 +0200)]
M = matrix(1:4, 2, 2); B = [2; 4];
C = M^-1*B;
assert_checkequal(C, [2;0]);

Change-Id: Ia970740cf7c19d0605062a324175bd5df5055347

scilab/modules/ast/includes/exps/doubleexp.hxx
scilab/modules/ast/includes/parse/parsescilab.hxx
scilab/modules/ast/src/cpp/parse/bison/parsescilab.output
scilab/modules/ast/src/cpp/parse/bison/parsescilab.yy
scilab/modules/ast/src/cpp/parse/parsescilab.cpp
scilab/modules/ast/tests/unit_tests/uminus.dia.ref
scilab/modules/ast/tests/unit_tests/uminus.tst

index 5da6ef0..a3842aa 100644 (file)
@@ -87,10 +87,21 @@ public:
     {
         return DOUBLEEXP;
     }
+
     inline bool isDoubleExp() const
     {
         return true;
     }
+    
+    inline DoubleExp* neg()
+    {
+        _value = -_value;
+        //constant will not be update but
+        //normally neg is only called by parser
+        //before constant was created
+        return this;
+    }
+
 
 protected:
     double _value;
index c3ad3bc..186e727 100644 (file)
@@ -126,7 +126,8 @@ extern int yydebug;
     UPLEVEL = 335,
     LISTABLE = 336,
     CONTROLBREAK = 337,
-    FUNCTIONCALL = 338
+    UMINUS = 338,
+    FUNCTIONCALL = 339
   };
 #endif
 /* Tokens.  */
@@ -211,7 +212,8 @@ extern int yydebug;
 #define UPLEVEL 335
 #define LISTABLE 336
 #define CONTROLBREAK 337
-#define FUNCTIONCALL 338
+#define UMINUS 338
+#define FUNCTIONCALL 339
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
index b624343..ced8d2c 100644 (file)
@@ -585,78 +585,79 @@ HIGHLEVEL (334)
 UPLEVEL (335)
 LISTABLE (336)
 CONTROLBREAK (337)
-FUNCTIONCALL (338)
+UMINUS (338)
+FUNCTIONCALL (339)
 
 
 Non-terminaux, suivis des règles où ils apparaissent
 
-$accept (84)
+$accept (85)
     à gauche: 0
-program (85)
+program (86)
     à gauche: 1 2 3 4, à droite: 0
-expressions (86)
+expressions (87)
     à gauche: 5 6 7 8 9, à droite: 1 2 105 280 282 330 356 359 381
     382 383 384
-recursiveExpression (87)
+recursiveExpression (88)
     à gauche: 10 11 12 13, à droite: 5 6 7 10 11
-expressionLineBreak (88)
+expressionLineBreak (89)
     à gauche: 14 15 16 17 18 19, à droite: 3 10 11 12 13 17 18 19
-expression (89)
+expression (90)
     à gauche: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34, à droite:
     6 7 8 9 10 11 12 13
-implicitFunctionCall (90)
+implicitFunctionCall (91)
     à gauche: 35 36, à droite: 29 35
-implicitCallable (91)
+implicitCallable (92)
     à gauche: 37 38 39 40 41 42 43 44 45 46 47 48 49, à droite: 35
     36 45 46 48
-functionCall (92)
+functionCall (93)
     à gauche: 50 51, à droite: 21 46 51 57 62 67 107 110 112 115
     118 121 124 127 130 133 136 139 142 144 146 148 149 150 152 153
     154 157 158 160 162 164 166 168 170 172 174 176 178 180 182 184
     186 188 190 193 196 197 198 199 201 217 219 221 222 223 249 251
     254 259 260 261 263 265 268 269 270 271 275 318 325 327 329 346
     389
-simpleFunctionCall (93)
+simpleFunctionCall (94)
     à gauche: 52 53 54 55, à droite: 47 50
-functionArgs (94)
+functionArgs (95)
     à gauche: 56 57 58 59 60 61 62 63 64 65 66 67 68 69, à droite:
     52 53 65 66 67 68 69 216 217 274 275
-functionDeclaration (95)
+functionDeclaration (96)
     à gauche: 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
     88 89 90 91 92 93, à droite: 20
-functionDeclarationReturns (96)
+functionDeclarationReturns (97)
     à gauche: 94, à droite: 71 75 79 83 87 91
-functionDeclarationArguments (97)
+functionDeclarationArguments (98)
     à gauche: 95 96 97, à droite: 70 71 72 73 74 75 76 77 78 79 80
     81 82 83 84 85 86 87 88 89 90 91 92 93
-idList (98)
+idList (99)
     à gauche: 98 99, à droite: 94 95 98
-functionDeclarationBreak (99)
+functionDeclarationBreak (100)
     à gauche: 100 101 102 103 104, à droite: 70 71 72 73 74 75 76
     77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
-functionBody (100)
+functionBody (101)
     à gauche: 105 106, à droite: 70 71 72 73 74 75 76 77 78 79 80
     81 82 83 84 85 86 87 88 89 90 91 92 93
-condition (101)
+condition (102)
     à gauche: 107 108, à droite: 277 278 279 301 302 303 358
-comparison (102)
+comparison (103)
     à gauche: 109 110, à droite: 215
-rightComparable (103)
+rightComparable (104)
     à gauche: 111 112 113 114 115 116 117 118 119 120 121 122 123
     124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
     140, à droite: 109 110
-operation (104)
+operation (105)
     à gauche: 141 142 143 144 145 146 147 148 149 150 151 152 153
     154 155 156 157 158, à droite: 204
-rightOperand (105)
+rightOperand (106)
     à gauche: 159 160 161 162 163 164 165 166 167 168 169 170 171
     172 173 174 175 176 177 178 179 180 181 182 183 184 185 186, à droite:
     48 141 142
-listableBegin (106)
+listableBegin (107)
     à gauche: 187 188, à droite: 189 190 191
-listableEnd (107)
+listableEnd (108)
     à gauche: 189 190 191, à droite: 200 201
-variable (108)
+variable (109)
     à gauche: 192 193 194 195 196 197 198 199 200 201 202 203 204
     205 206 207 208 209 210 211 212 213 214 215 216 217, à droite:
     28 56 61 66 108 109 111 114 117 120 123 126 129 132 135 138 141
@@ -664,91 +665,91 @@ variable (108)
     171 173 175 177 179 181 183 185 187 189 192 194 195 196 197 200
     213 216 218 220 222 223 248 250 253 258 260 266 267 268 269 274
     317 324 326 328 347 388
-variableFields (109)
+variableFields (110)
     à gauche: 218 219 220 221 222 223, à droite: 214 218 219
-cell (110)
+cell (111)
     à gauche: 224 225 226 227 228 229 230 231, à droite: 203
-matrix (111)
+matrix (112)
     à gauche: 232 233 234 235 236 237 238 239, à droite: 202
-matrixOrCellLines (112)
+matrixOrCellLines (113)
     à gauche: 240 241, à droite: 224 225 226 227 232 233 234 235
     240
-matrixOrCellLineBreak (113)
+matrixOrCellLineBreak (114)
     à gauche: 242 243 244 245, à droite: 244 245 246 247
-matrixOrCellLine (114)
+matrixOrCellLine (115)
     à gauche: 246 247, à droite: 240 241
-matrixOrCellColumns (115)
+matrixOrCellColumns (116)
     à gauche: 248 249 250 251 252 253 254 255, à droite: 226 227
     228 229 234 235 236 237 246 247 248 249 250 251 252 276
-matrixOrCellColumnsBreak (116)
+matrixOrCellColumnsBreak (117)
     à gauche: 256 257, à droite: 247 248 249 256
-variableDeclaration (117)
+variableDeclaration (118)
     à gauche: 258 259 260 261 262 263 264 265, à droite: 22 59 64
     69
-assignable (118)
+assignable (119)
     à gauche: 266 267 268 269 270 271 272 273 274 275, à droite:
     258 259 262 264
-multipleResults (119)
+multipleResults (120)
     à gauche: 276, à droite: 273
-ifControl (120)
+ifControl (121)
     à gauche: 277 278 279, à droite: 23
-thenBody (121)
+thenBody (122)
     à gauche: 280 281, à droite: 277 278 279 301 302 303
-elseBody (122)
+elseBody (123)
     à gauche: 282 283, à droite: 278 302 305 307
-ifConditionBreak (123)
+ifConditionBreak (124)
     à gauche: 284 285 286 287 288, à droite: 290 291 292 293
-then (124)
+then (125)
     à gauche: 289 290 291 292 293 294, à droite: 277 278 279 301
     302 303
-else (125)
+else (126)
     à gauche: 295 296 297 298 299 300, à droite: 278 302 310
-elseIfControl (126)
+elseIfControl (127)
     à gauche: 301 302 303, à droite: 279 303
-selectControl (127)
+selectControl (128)
     à gauche: 304 305 306 307, à droite: 24
-select (128)
+select (129)
     à gauche: 308 309, à droite: 304 305 306 307
-defaultCase (129)
+defaultCase (130)
     à gauche: 310 311 312 313 314 315 316, à droite: 305 307
-selectable (130)
+selectable (131)
     à gauche: 317 318, à droite: 304 305 306 307
-selectConditionBreak (131)
+selectConditionBreak (132)
     à gauche: 319 320 321 322 323, à droite: 304 305 306 307
-casesControl (132)
+casesControl (133)
     à gauche: 324 325 326 327 328 329, à droite: 304 305 306 307
     328 329
-caseBody (133)
+caseBody (134)
     à gauche: 330 331, à droite: 324 325 326 327 328 329
-caseControlBreak (134)
+caseControlBreak (135)
     à gauche: 332 333 334 335 336 337 338 339 340 341 342 343, à droite:
     324 325 326 327 328 329
-forControl (135)
+forControl (136)
     à gauche: 344 345, à droite: 25
-forIterator (136)
+forIterator (137)
     à gauche: 346 347, à droite: 344 345
-forConditionBreak (137)
+forConditionBreak (138)
     à gauche: 348 349 350 351 352 353 354 355, à droite: 344 345
-forBody (138)
+forBody (139)
     à gauche: 356 357, à droite: 344 345
-whileControl (139)
+whileControl (140)
     à gauche: 358, à droite: 26
-whileBody (140)
+whileBody (141)
     à gauche: 359 360, à droite: 358
-whileConditionBreak (141)
+whileConditionBreak (142)
     à gauche: 361 362 363 364 365 366 367 368 369 370 371 372 373
     374 375 376 377 378, à droite: 358
-tryControl (142)
+tryControl (143)
     à gauche: 379 380, à droite: 27
-catchBody (143)
+catchBody (144)
     à gauche: 381 382 383 384 385 386, à droite: 379 380
-returnControl (144)
+returnControl (145)
     à gauche: 387 388 389, à droite: 32 264 265
-comments (145)
+comments (146)
     à gauche: 390 391, à droite: 326 327 391
-lineEnd (146)
+lineEnd (147)
     à gauche: 392 393, à droite: 100
-keywords (147)
+keywords (148)
     à gauche: 394 395 396 397 398 399 400 401 402 403 404 405 406
     407 408 409 410 411 412 413, à droite: 195 198 267 270
 
@@ -5255,7 +5256,7 @@ keywords (147)
   139                | . "<=" functionCall
   140                | . "<=" ":"
   142 operation: functionCall . rightOperand
-  144          | "-" functionCall .  ["end of file", error, "end of line", "%t or %T", "%f or %F", "~ or @", "$", ",", ":", ";", ")", "[", "]", "{", "}", "+", "-", "==", "<> or ~=", "<", "<=", ">", ">=", "&", "&&", "|", "||", "=", "if", "then", "else", "elseif", "end", "select", "switch", "case", "otherwise", "function", "endfunction", "#function", "hidden", "for", "while", "do", "break", "continue", "try", "catch", "return", "string", "identifier", "integer", "float", "number", "path", "line comment"]
+  144          | "-" functionCall .  ["end of file", error, "end of line", "%t or %T", "%f or %F", "~ or @", "$", ",", ":", ";", ")", "[", "]", "{", "}", "+", "-", "*", ".*", ".*.", "*.", "/", "./", "/.", "./.", "\\", ".\\", "\\.", ".\\.", "==", "<> or ~=", "<", "<=", ">", ">=", "&", "&&", "|", "||", "=", "if", "then", "else", "elseif", "end", "select", "switch", "case", "otherwise", "function", "endfunction", "#function", "hidden", "for", "while", "do", "break", "continue", "try", "catch", "return", "string", "identifier", "integer", "float", "number", "path", "line comment"]
   149          | functionCall . "** or ^" variable
   150          | functionCall . "** or ^" functionCall
   153          | functionCall . ".^" variable
@@ -5305,18 +5306,6 @@ keywords (147)
     "("        décalage et aller à l'état 170
     "."        décalage et aller à l'état 171
     ".'"       décalage et aller à l'état 124
-    "*"        décalage et aller à l'état 127
-    ".*"       décalage et aller à l'état 128
-    ".*."      décalage et aller à l'état 129
-    "*."       décalage et aller à l'état 130
-    "/"        décalage et aller à l'état 131
-    "./"       décalage et aller à l'état 132
-    "/."       décalage et aller à l'état 133
-    "./."      décalage et aller à l'état 134
-    "\\"       décalage et aller à l'état 135
-    ".\\"      décalage et aller à l'état 136
-    "\\."      décalage et aller à l'état 137
-    ".\\."     décalage et aller à l'état 138
     "** or ^"  décalage et aller à l'état 139
     ".^"       décalage et aller à l'état 140
 
@@ -5327,37 +5316,37 @@ keywords (147)
     listableBegin    aller à l'état 154
     listableEnd      aller à l'état 155
 
-    Conflit entre la règle 144 et le jeton "'" résolu par décalage (MINUS < "'").
-    Conflit entre la règle 144 et le jeton ":" résolu par réduction (":" < MINUS).
-    Conflit entre la règle 144 et le jeton "(" résolu par décalage (MINUS < "(").
-    Conflit entre la règle 144 et le jeton "." résolu par décalage (MINUS < ".").
-    Conflit entre la règle 144 et le jeton ".'" résolu par décalage (MINUS < ".'").
-    Conflit entre la règle 144 et le jeton "+" résolu par réduction (%left "+").
-    Conflit entre la règle 144 et le jeton "-" résolu par réduction (%left "-").
-    Conflit entre la règle 144 et le jeton "*" résolu par décalage (MINUS < "*").
-    Conflit entre la règle 144 et le jeton ".*" résolu par décalage (MINUS < ".*").
-    Conflit entre la règle 144 et le jeton ".*." résolu par décalage (MINUS < ".*.").
-    Conflit entre la règle 144 et le jeton "*." résolu par décalage (MINUS < "*.").
-    Conflit entre la règle 144 et le jeton "/" résolu par décalage (MINUS < "/").
-    Conflit entre la règle 144 et le jeton "./" résolu par décalage (MINUS < "./").
-    Conflit entre la règle 144 et le jeton "/." résolu par décalage (MINUS < "/.").
-    Conflit entre la règle 144 et le jeton "./." résolu par décalage (MINUS < "./.").
-    Conflit entre la règle 144 et le jeton "\\" résolu par décalage (MINUS < "\\").
-    Conflit entre la règle 144 et le jeton ".\\" résolu par décalage (MINUS < ".\\").
-    Conflit entre la règle 144 et le jeton "\\." résolu par décalage (MINUS < "\\.").
-    Conflit entre la règle 144 et le jeton ".\\." résolu par décalage (MINUS < ".\\.").
-    Conflit entre la règle 144 et le jeton "** or ^" résolu par décalage (MINUS < "** or ^").
-    Conflit entre la règle 144 et le jeton ".^" résolu par décalage (MINUS < ".^").
-    Conflit entre la règle 144 et le jeton "==" résolu par réduction ("==" < MINUS).
-    Conflit entre la règle 144 et le jeton "<> or ~=" résolu par réduction ("<> or ~=" < MINUS).
-    Conflit entre la règle 144 et le jeton "<" résolu par réduction ("<" < MINUS).
-    Conflit entre la règle 144 et le jeton "<=" résolu par réduction ("<=" < MINUS).
-    Conflit entre la règle 144 et le jeton ">" résolu par réduction (">" < MINUS).
-    Conflit entre la règle 144 et le jeton ">=" résolu par réduction (">=" < MINUS).
-    Conflit entre la règle 144 et le jeton "&" résolu par réduction ("&" < MINUS).
-    Conflit entre la règle 144 et le jeton "&&" résolu par réduction ("&&" < MINUS).
-    Conflit entre la règle 144 et le jeton "|" résolu par réduction ("|" < MINUS).
-    Conflit entre la règle 144 et le jeton "||" résolu par réduction ("||" < MINUS).
+    Conflit entre la règle 144 et le jeton "'" résolu par décalage (UMINUS < "'").
+    Conflit entre la règle 144 et le jeton ":" résolu par réduction (":" < UMINUS).
+    Conflit entre la règle 144 et le jeton "(" résolu par décalage (UMINUS < "(").
+    Conflit entre la règle 144 et le jeton "." résolu par décalage (UMINUS < ".").
+    Conflit entre la règle 144 et le jeton ".'" résolu par décalage (UMINUS < ".'").
+    Conflit entre la règle 144 et le jeton "+" résolu par réduction ("+" < UMINUS).
+    Conflit entre la règle 144 et le jeton "-" résolu par réduction ("-" < UMINUS).
+    Conflit entre la règle 144 et le jeton "*" résolu par réduction ("*" < UMINUS).
+    Conflit entre la règle 144 et le jeton ".*" résolu par réduction (".*" < UMINUS).
+    Conflit entre la règle 144 et le jeton ".*." résolu par réduction (".*." < UMINUS).
+    Conflit entre la règle 144 et le jeton "*." résolu par réduction ("*." < UMINUS).
+    Conflit entre la règle 144 et le jeton "/" résolu par réduction ("/" < UMINUS).
+    Conflit entre la règle 144 et le jeton "./" résolu par réduction ("./" < UMINUS).
+    Conflit entre la règle 144 et le jeton "/." résolu par réduction ("/." < UMINUS).
+    Conflit entre la règle 144 et le jeton "./." résolu par réduction ("./." < UMINUS).
+    Conflit entre la règle 144 et le jeton "\\" résolu par réduction ("\\" < UMINUS).
+    Conflit entre la règle 144 et le jeton ".\\" résolu par réduction (".\\" < UMINUS).
+    Conflit entre la règle 144 et le jeton "\\." résolu par réduction ("\\." < UMINUS).
+    Conflit entre la règle 144 et le jeton ".\\." résolu par réduction (".\\." < UMINUS).
+    Conflit entre la règle 144 et le jeton "** or ^" résolu par décalage (UMINUS < "** or ^").
+    Conflit entre la règle 144 et le jeton ".^" résolu par décalage (UMINUS < ".^").
+    Conflit entre la règle 144 et le jeton "==" résolu par réduction ("==" < UMINUS).
+    Conflit entre la règle 144 et le jeton "<> or ~=" résolu par réduction ("<> or ~=" < UMINUS).
+    Conflit entre la règle 144 et le jeton "<" résolu par réduction ("<" < UMINUS).
+    Conflit entre la règle 144 et le jeton "<=" résolu par réduction ("<=" < UMINUS).
+    Conflit entre la règle 144 et le jeton ">" résolu par réduction (">" < UMINUS).
+    Conflit entre la règle 144 et le jeton ">=" résolu par réduction (">=" < UMINUS).
+    Conflit entre la règle 144 et le jeton "&" résolu par réduction ("&" < UMINUS).
+    Conflit entre la règle 144 et le jeton "&&" résolu par réduction ("&&" < UMINUS).
+    Conflit entre la règle 144 et le jeton "|" résolu par réduction ("|" < UMINUS).
+    Conflit entre la règle 144 et le jeton "||" résolu par réduction ("||" < UMINUS).
 
 
 État 79
@@ -5394,7 +5383,7 @@ keywords (147)
   139                | . "<=" functionCall
   140                | . "<=" ":"
   141 operation: variable . rightOperand
-  143          | "-" variable .  ["end of file", error, "end of line", "%t or %T", "%f or %F", "~ or @", "$", ",", ":", ";", ")", "[", "]", "{", "}", "+", "-", "==", "<> or ~=", "<", "<=", ">", ">=", "&", "&&", "|", "||", "=", "if", "then", "else", "elseif", "end", "select", "switch", "case", "otherwise", "function", "endfunction", "#function", "hidden", "for", "while", "do", "break", "continue", "try", "catch", "return", "string", "identifier", "integer", "float", "number", "path", "line comment"]
+  143          | "-" variable .  ["end of file", error, "end of line", "%t or %T", "%f or %F", "~ or @", "$", ",", ":", ";", ")", "[", "]", "{", "}", "+", "-", "*", ".*", ".*.", "*.", "/", "./", "/.", "./.", "\\", ".\\", "\\.", ".\\.", "==", "<> or ~=", "<", "<=", ">", ">=", "&", "&&", "|", "||", "=", "if", "then", "else", "elseif", "end", "select", "switch", "case", "otherwise", "function", "endfunction", "#function", "hidden", "for", "while", "do", "break", "continue", "try", "catch", "return", "string", "identifier", "integer", "float", "number", "path", "line comment"]
   147          | variable . "** or ^" variable
   148          | variable . "** or ^" functionCall
   151          | variable . ".^" variable
@@ -5444,18 +5433,6 @@ keywords (147)
     "("        décalage et aller à l'état 172
     "."        décalage et aller à l'état 173
     ".'"       décalage et aller à l'état 159
-    "*"        décalage et aller à l'état 127
-    ".*"       décalage et aller à l'état 128
-    ".*."      décalage et aller à l'état 129
-    "*."       décalage et aller à l'état 130
-    "/"        décalage et aller à l'état 131
-    "./"       décalage et aller à l'état 132
-    "/."       décalage et aller à l'état 133
-    "./."      décalage et aller à l'état 134
-    "\\"       décalage et aller à l'état 135
-    ".\\"      décalage et aller à l'état 136
-    "\\."      décalage et aller à l'état 137
-    ".\\."     décalage et aller à l'état 138
     "** or ^"  décalage et aller à l'état 160
     ".^"       décalage et aller à l'état 161
 
@@ -5466,37 +5443,37 @@ keywords (147)
     listableBegin    aller à l'état 154
     listableEnd      aller à l'état 164
 
-    Conflit entre la règle 143 et le jeton "'" résolu par décalage (MINUS < "'").
-    Conflit entre la règle 143 et le jeton ":" résolu par réduction (":" < MINUS).
-    Conflit entre la règle 143 et le jeton "(" résolu par décalage (MINUS < "(").
-    Conflit entre la règle 143 et le jeton "." résolu par décalage (MINUS < ".").
-    Conflit entre la règle 143 et le jeton ".'" résolu par décalage (MINUS < ".'").
-    Conflit entre la règle 143 et le jeton "+" résolu par réduction (%left "+").
-    Conflit entre la règle 143 et le jeton "-" résolu par réduction (%left "-").
-    Conflit entre la règle 143 et le jeton "*" résolu par décalage (MINUS < "*").
-    Conflit entre la règle 143 et le jeton ".*" résolu par décalage (MINUS < ".*").
-    Conflit entre la règle 143 et le jeton ".*." résolu par décalage (MINUS < ".*.").
-    Conflit entre la règle 143 et le jeton "*." résolu par décalage (MINUS < "*.").
-    Conflit entre la règle 143 et le jeton "/" résolu par décalage (MINUS < "/").
-    Conflit entre la règle 143 et le jeton "./" résolu par décalage (MINUS < "./").
-    Conflit entre la règle 143 et le jeton "/." résolu par décalage (MINUS < "/.").
-    Conflit entre la règle 143 et le jeton "./." résolu par décalage (MINUS < "./.").
-    Conflit entre la règle 143 et le jeton "\\" résolu par décalage (MINUS < "\\").
-    Conflit entre la règle 143 et le jeton ".\\" résolu par décalage (MINUS < ".\\").
-    Conflit entre la règle 143 et le jeton "\\." résolu par décalage (MINUS < "\\.").
-    Conflit entre la règle 143 et le jeton ".\\." résolu par décalage (MINUS < ".\\.").
-    Conflit entre la règle 143 et le jeton "** or ^" résolu par décalage (MINUS < "** or ^").
-    Conflit entre la règle 143 et le jeton ".^" résolu par décalage (MINUS < ".^").
-    Conflit entre la règle 143 et le jeton "==" résolu par réduction ("==" < MINUS).
-    Conflit entre la règle 143 et le jeton "<> or ~=" résolu par réduction ("<> or ~=" < MINUS).
-    Conflit entre la règle 143 et le jeton "<" résolu par réduction ("<" < MINUS).
-    Conflit entre la règle 143 et le jeton "<=" résolu par réduction ("<=" < MINUS).
-    Conflit entre la règle 143 et le jeton ">" résolu par réduction (">" < MINUS).
-    Conflit entre la règle 143 et le jeton ">=" résolu par réduction (">=" < MINUS).
-    Conflit entre la règle 143 et le jeton "&" résolu par réduction ("&" < MINUS).
-    Conflit entre la règle 143 et le jeton "&&" résolu par réduction ("&&" < MINUS).
-    Conflit entre la règle 143 et le jeton "|" résolu par réduction ("|" < MINUS).
-    Conflit entre la règle 143 et le jeton "||" résolu par réduction ("||" < MINUS).
+    Conflit entre la règle 143 et le jeton "'" résolu par décalage (UMINUS < "'").
+    Conflit entre la règle 143 et le jeton ":" résolu par réduction (":" < UMINUS).
+    Conflit entre la règle 143 et le jeton "(" résolu par décalage (UMINUS < "(").
+    Conflit entre la règle 143 et le jeton "." résolu par décalage (UMINUS < ".").
+    Conflit entre la règle 143 et le jeton ".'" résolu par décalage (UMINUS < ".'").
+    Conflit entre la règle 143 et le jeton "+" résolu par réduction ("+" < UMINUS).
+    Conflit entre la règle 143 et le jeton "-" résolu par réduction ("-" < UMINUS).
+    Conflit entre la règle 143 et le jeton "*" résolu par réduction ("*" < UMINUS).
+    Conflit entre la règle 143 et le jeton ".*" résolu par réduction (".*" < UMINUS).
+    Conflit entre la règle 143 et le jeton ".*." résolu par réduction (".*." < UMINUS).
+    Conflit entre la règle 143 et le jeton "*." résolu par réduction ("*." < UMINUS).
+    Conflit entre la règle 143 et le jeton "/" résolu par réduction ("/" < UMINUS).
+    Conflit entre la règle 143 et le jeton "./" résolu par réduction ("./" < UMINUS).
+    Conflit entre la règle 143 et le jeton "/." résolu par réduction ("/." < UMINUS).
+    Conflit entre la règle 143 et le jeton "./." résolu par réduction ("./." < UMINUS).
+    Conflit entre la règle 143 et le jeton "\\" résolu par réduction ("\\" < UMINUS).
+    Conflit entre la règle 143 et le jeton ".\\" résolu par réduction (".\\" < UMINUS).
+    Conflit entre la règle 143 et le jeton "\\." résolu par réduction ("\\." < UMINUS).
+    Conflit entre la règle 143 et le jeton ".\\." résolu par réduction (".\\." < UMINUS).
+    Conflit entre la règle 143 et le jeton "** or ^" résolu par décalage (UMINUS < "** or ^").
+    Conflit entre la règle 143 et le jeton ".^" résolu par décalage (UMINUS < ".^").
+    Conflit entre la règle 143 et le jeton "==" résolu par réduction ("==" < UMINUS).
+    Conflit entre la règle 143 et le jeton "<> or ~=" résolu par réduction ("<> or ~=" < UMINUS).
+    Conflit entre la règle 143 et le jeton "<" résolu par réduction ("<" < UMINUS).
+    Conflit entre la règle 143 et le jeton "<=" résolu par réduction ("<=" < UMINUS).
+    Conflit entre la règle 143 et le jeton ">" résolu par réduction (">" < UMINUS).
+    Conflit entre la règle 143 et le jeton ">=" résolu par réduction (">=" < UMINUS).
+    Conflit entre la règle 143 et le jeton "&" résolu par réduction ("&" < UMINUS).
+    Conflit entre la règle 143 et le jeton "&&" résolu par réduction ("&&" < UMINUS).
+    Conflit entre la règle 143 et le jeton "|" résolu par réduction ("|" < UMINUS).
+    Conflit entre la règle 143 et le jeton "||" résolu par réduction ("||" < UMINUS).
 
 
 État 80
index b47c809..a72b8f5 100644 (file)
 %left EQ NE LT LE GT GE
 %left MINUS PLUS
 %left TIMES DOTTIMES KRONTIMES CONTROLTIMES RDIVIDE DOTRDIVIDE KRONRDIVIDE CONTROLRDIVIDE LDIVIDE DOTLDIVIDE KRONLDIVIDE CONTROLLDIVIDE
+%left UMINUS
 %right POWER DOTPOWER
 
 %left QUOTE DOTQUOTE
@@ -1007,22 +1008,22 @@ variable rightOperand                   {
                                          $2->setLocation(@$);
                                          $$ = $2;
                                        }
-| MINUS variable                       { $$ = new ast::OpExp(@$, *new ast::DoubleExp(@$, 0.0), ast::OpExp::unaryMinus, *$2); }
-| MINUS functionCall                   { $$ = new ast::OpExp(@$, *new ast::DoubleExp(@$, 0.0), ast::OpExp::unaryMinus, *$2); }
-| PLUS variable                                { $$ = $2; }
-| PLUS functionCall                    { $$ = $2; }
-| variable POWER variable              { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
-| variable POWER functionCall          { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
-| functionCall POWER variable          { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
-| functionCall POWER functionCall      { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
-| variable DOTPOWER variable           { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
-| variable DOTPOWER functionCall       { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
-| functionCall DOTPOWER variable       { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
+| MINUS variable        %prec UMINUS    { if ($2->isDoubleExp()) { $$ = $2->getAs<ast::DoubleExp>()->neg(); } else { $$ = new ast::OpExp(@$, *new ast::DoubleExp(@$, 0.0), ast::OpExp::unaryMinus, *$2); } }
+| MINUS functionCall    %prec UMINUS    { $$ = new ast::OpExp(@$, *new ast::DoubleExp(@$, 0.0), ast::OpExp::unaryMinus, *$2); }
+| PLUS variable                                            { $$ = $2; }
+| PLUS functionCall                                { $$ = $2; }
+| variable POWER variable                      { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
+| variable POWER functionCall              { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
+| functionCall POWER variable              { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
+| functionCall POWER functionCall          { $$ = new ast::OpExp(@$, *$1, ast::OpExp::power, *$3); }
+| variable DOTPOWER variable               { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
+| variable DOTPOWER functionCall           { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
+| functionCall DOTPOWER variable           { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
 | functionCall DOTPOWER functionCall   { $$ = new ast::OpExp(@$, *$1, ast::OpExp::dotpower, *$3); }
-| variable QUOTE                       { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_Conjugate_); }
-| variable DOTQUOTE                    { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_NonConjugate_); }
-| functionCall QUOTE                   { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_Conjugate_); }
-| functionCall DOTQUOTE                        { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_NonConjugate_); }
+| variable QUOTE                                   { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_Conjugate_); }
+| variable DOTQUOTE                                { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_NonConjugate_); }
+| functionCall QUOTE                           { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_Conjugate_); }
+| functionCall DOTQUOTE                                { $$ = new ast::TransposeExp(@$, *$1, ast::TransposeExp::_NonConjugate_); }
 ;
 
 /*
index fa32471..d5427b9 100644 (file)
@@ -225,7 +225,8 @@ extern int yydebug;
     UPLEVEL = 335,
     LISTABLE = 336,
     CONTROLBREAK = 337,
-    FUNCTIONCALL = 338
+    UMINUS = 338,
+    FUNCTIONCALL = 339
   };
 #endif
 /* Tokens.  */
@@ -310,7 +311,8 @@ extern int yydebug;
 #define UPLEVEL 335
 #define LISTABLE 336
 #define CONTROLBREAK 337
-#define FUNCTIONCALL 338
+#define UMINUS 338
+#define FUNCTIONCALL 339
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -648,7 +650,7 @@ union yyalloc
 #define YYLAST   3736
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  84
+#define YYNTOKENS  85
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  64
 /* YYNRULES -- Number of rules.  */
@@ -659,7 +661,7 @@ union yyalloc
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   338
+#define YYMAXUTOK   339
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -701,55 +703,55 @@ static const yytype_uint8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   318,   318,   319,   320,   328,   342,   345,   350,   356,
-     362,   376,   386,   394,   403,   421,   422,   423,   424,   425,
-     426,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-     443,   444,   445,   446,   447,   448,   461,   466,   482,   483,
-     488,   493,   498,   499,   500,   501,   502,   508,   509,   510,
-     511,   519,   521,   532,   533,   534,   535,   558,   562,   566,
-     570,   574,   579,   584,   589,   594,   599,   603,   607,   611,
-     615,   634,   645,   653,   662,   671,   682,   690,   699,   708,
-     719,   727,   736,   745,   756,   764,   773,   782,   793,   801,
-     810,   819,   830,   838,   847,   863,   871,   872,   873,   881,
-     886,   898,   899,   900,   901,   902,   910,   911,   925,   926,
-     934,   939,   952,   953,   954,   956,   957,   958,   960,   961,
-     962,   964,   965,   966,   968,   969,   970,   972,   973,   974,
-     976,   977,   978,   980,   981,   982,   984,   985,   986,   988,
-     989,   990,   998,  1004,  1010,  1011,  1012,  1013,  1014,  1015,
-    1016,  1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,
-    1034,  1035,  1037,  1038,  1040,  1041,  1042,  1043,  1044,  1045,
-    1046,  1047,  1049,  1050,  1051,  1052,  1053,  1054,  1055,  1056,
-    1058,  1059,  1060,  1061,  1062,  1063,  1064,  1065,  1073,  1074,
-    1082,  1083,  1084,  1092,  1093,  1094,  1095,  1096,  1101,  1102,
-    1103,  1108,  1112,  1116,  1117,  1118,  1119,  1120,  1121,  1122,
-    1123,  1124,  1125,  1126,  1127,  1128,  1129,  1130,  1131,  1139,
-    1143,  1147,  1152,  1157,  1162,  1173,  1174,  1175,  1179,  1183,
-    1188,  1193,  1194,  1203,  1204,  1205,  1209,  1213,  1218,  1223,
-    1224,  1232,  1236,  1249,  1250,  1251,  1252,  1260,  1261,  1269,
-    1273,  1277,  1281,  1285,  1289,  1293,  1297,  1308,  1309,  1317,
-    1318,  1319,  1320,  1322,  1323,  1325,  1326,  1335,  1336,  1337,
-    1342,  1343,  1344,  1349,  1350,  1351,  1352,  1359,  1368,  1369,
-    1379,  1387,  1388,  1402,  1403,  1419,  1420,  1421,  1422,  1423,
-    1431,  1432,  1433,  1434,  1435,  1436,  1444,  1445,  1446,  1447,
-    1448,  1449,  1457,  1462,  1475,  1490,  1491,  1501,  1502,  1520,
-    1521,  1529,  1530,  1531,  1532,  1533,  1534,  1535,  1543,  1544,
-    1552,  1553,  1554,  1555,  1556,  1564,  1568,  1572,  1576,  1580,
-    1584,  1591,  1592,  1606,  1607,  1608,  1609,  1610,  1611,  1612,
-    1613,  1614,  1615,  1616,  1617,  1625,  1626,  1634,  1635,  1644,
-    1645,  1646,  1647,  1648,  1649,  1650,  1651,  1655,  1656,  1670,
-    1678,  1679,  1693,  1694,  1695,  1696,  1697,  1698,  1699,  1700,
-    1701,  1702,  1703,  1704,  1705,  1706,  1707,  1708,  1709,  1710,
-    1718,  1719,  1733,  1734,  1735,  1736,  1737,  1744,  1758,  1759,
-    1760,  1767,  1768,  1776,  1777,  1785,  1786,  1787,  1788,  1789,
-    1790,  1791,  1792,  1793,  1794,  1795,  1796,  1797,  1798,  1799,
-    1800,  1801,  1802,  1803,  1804
+       0,   319,   319,   320,   321,   329,   343,   346,   351,   357,
+     363,   377,   387,   395,   404,   422,   423,   424,   425,   426,
+     427,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   462,   467,   483,   484,
+     489,   494,   499,   500,   501,   502,   503,   509,   510,   511,
+     512,   520,   522,   533,   534,   535,   536,   559,   563,   567,
+     571,   575,   580,   585,   590,   595,   600,   604,   608,   612,
+     616,   635,   646,   654,   663,   672,   683,   691,   700,   709,
+     720,   728,   737,   746,   757,   765,   774,   783,   794,   802,
+     811,   820,   831,   839,   848,   864,   872,   873,   874,   882,
+     887,   899,   900,   901,   902,   903,   911,   912,   926,   927,
+     935,   940,   953,   954,   955,   957,   958,   959,   961,   962,
+     963,   965,   966,   967,   969,   970,   971,   973,   974,   975,
+     977,   978,   979,   981,   982,   983,   985,   986,   987,   989,
+     990,   991,   999,  1005,  1011,  1012,  1013,  1014,  1015,  1016,
+    1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,  1026,
+    1035,  1036,  1038,  1039,  1041,  1042,  1043,  1044,  1045,  1046,
+    1047,  1048,  1050,  1051,  1052,  1053,  1054,  1055,  1056,  1057,
+    1059,  1060,  1061,  1062,  1063,  1064,  1065,  1066,  1074,  1075,
+    1083,  1084,  1085,  1093,  1094,  1095,  1096,  1097,  1102,  1103,
+    1104,  1109,  1113,  1117,  1118,  1119,  1120,  1121,  1122,  1123,
+    1124,  1125,  1126,  1127,  1128,  1129,  1130,  1131,  1132,  1140,
+    1144,  1148,  1153,  1158,  1163,  1174,  1175,  1176,  1180,  1184,
+    1189,  1194,  1195,  1204,  1205,  1206,  1210,  1214,  1219,  1224,
+    1225,  1233,  1237,  1250,  1251,  1252,  1253,  1261,  1262,  1270,
+    1274,  1278,  1282,  1286,  1290,  1294,  1298,  1309,  1310,  1318,
+    1319,  1320,  1321,  1323,  1324,  1326,  1327,  1336,  1337,  1338,
+    1343,  1344,  1345,  1350,  1351,  1352,  1353,  1360,  1369,  1370,
+    1380,  1388,  1389,  1403,  1404,  1420,  1421,  1422,  1423,  1424,
+    1432,  1433,  1434,  1435,  1436,  1437,  1445,  1446,  1447,  1448,
+    1449,  1450,  1458,  1463,  1476,  1491,  1492,  1502,  1503,  1521,
+    1522,  1530,  1531,  1532,  1533,  1534,  1535,  1536,  1544,  1545,
+    1553,  1554,  1555,  1556,  1557,  1565,  1569,  1573,  1577,  1581,
+    1585,  1592,  1593,  1607,  1608,  1609,  1610,  1611,  1612,  1613,
+    1614,  1615,  1616,  1617,  1618,  1626,  1627,  1635,  1636,  1645,
+    1646,  1647,  1648,  1649,  1650,  1651,  1652,  1656,  1657,  1671,
+    1679,  1680,  1694,  1695,  1696,  1697,  1698,  1699,  1700,  1701,
+    1702,  1703,  1704,  1705,  1706,  1707,  1708,  1709,  1710,  1711,
+    1719,  1720,  1734,  1735,  1736,  1737,  1738,  1745,  1759,  1760,
+    1761,  1768,  1769,  1777,  1778,  1786,  1787,  1788,  1789,  1790,
+    1791,  1792,  1793,  1794,  1795,  1796,  1797,  1798,  1799,  1800,
+    1801,  1802,  1803,  1804,  1805
 };
 #endif
 
@@ -772,7 +774,7 @@ static const char *const yytname[] =
   "\"do\"", "\"break\"", "\"continue\"", "\"try\"", "\"catch\"",
   "\"return\"", "\"string\"", "\"identifier\"", "\"integer\"", "\"float\"",
   "\"number\"", "\"path\"", "\"line comment\"", "\"block comment\"",
-  "TOPLEVEL", "HIGHLEVEL", "UPLEVEL", "LISTABLE", "CONTROLBREAK",
+  "TOPLEVEL", "HIGHLEVEL", "UPLEVEL", "LISTABLE", "CONTROLBREAK", "UMINUS",
   "FUNCTIONCALL", "$accept", "program", "expressions",
   "recursiveExpression", "expressionLineBreak", "expression",
   "implicitFunctionCall", "implicitCallable", "functionCall",
@@ -806,7 +808,7 @@ static const yytype_uint16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338
+     335,   336,   337,   338,   339
 };
 # endif
 
@@ -831,7 +833,7 @@ static const yytype_int16 yypact[] =
     -494,  -494,  -494,  3319,  -494,  -494,  -494,    96,  -494,  -494,
     -494,  3059,  -494,  -494,  -494,  -494,  -494,  2144,   296,   129,
      206,  3239,  3279,   199,  2233,  -494,  -494,  3359,  3399,  2251,
-    -494,  1303,   581,  -494,  2322,  1882,  3653,  3683,  3653,  3683,
+    -494,  1303,   581,  -494,  2322,  1882,  3653,  3683,   180,   266,
     3359,   111,  3399,    33,     9,    39,    73,    43,    76,   108,
        8,  1579,  1811,  1811,  -494,    67,  3359,  3399,  -494,  -494,
     -494,  2447,  2516,  -494,   296,  -494,  -494,  -494,  -494,  3701,
@@ -1749,113 +1751,113 @@ static const yytype_uint8 yystos[] =
        0,     1,     4,     6,     7,     9,    10,    11,    13,    14,
       16,    18,    22,    23,    49,    54,    55,    58,    60,    61,
       62,    63,    65,    66,    67,    69,    70,    71,    72,    73,
-      74,    76,    85,    86,    87,    88,    89,    90,    92,    93,
-      95,   102,   104,   108,   110,   111,   117,   118,   119,   120,
-     127,   128,   135,   139,   142,   144,    86,    16,    71,    92,
-     108,    92,   108,   109,     4,    17,    76,    92,   108,   112,
-     114,   115,     4,    19,   112,   115,    92,   108,    92,   108,
-      92,   101,   108,    16,    71,    16,    71,    58,    14,    71,
-     101,     4,    11,    13,    86,   143,    92,   108,     6,     7,
-      10,    14,    18,    70,    71,    72,    73,    74,    75,    91,
-      93,     0,    89,     4,    11,    13,     4,    76,    88,    91,
+      74,    76,    86,    87,    88,    89,    90,    91,    93,    94,
+      96,   103,   105,   109,   111,   112,   118,   119,   120,   121,
+     128,   129,   136,   140,   143,   145,    87,    16,    71,    93,
+     109,    93,   109,   110,     4,    17,    76,    93,   109,   113,
+     115,   116,     4,    19,   113,   116,    93,   109,    93,   109,
+      93,   102,   109,    16,    71,    16,    71,    58,    14,    71,
+     102,     4,    11,    13,    87,   144,    93,   109,     6,     7,
+      10,    14,    18,    70,    71,    72,    73,    74,    75,    92,
+      94,     0,    90,     4,    11,    13,     4,    76,    89,    92,
        8,    12,    14,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,   103,   105,   106,   107,     8,    14,    20,    21,
-      36,    37,   103,   105,   107,    48,    92,   108,   130,   115,
+      47,    48,   104,   106,   107,   108,     8,    14,    20,    21,
+      36,    37,   104,   106,   108,    48,    93,   109,   131,   116,
       14,    20,    14,    20,    11,    15,    11,    15,    11,    15,
-      17,   112,   115,    17,   114,   115,     4,    11,    13,    17,
-      76,    92,   108,   113,   116,    19,   112,   115,    19,   115,
-      19,     4,    11,    13,    50,   123,   124,    17,    71,    96,
-      98,    14,    48,    97,    17,    96,    48,    97,    16,    71,
-      71,    48,     4,    11,    13,    50,    64,    76,   141,    86,
-      86,    86,    53,    68,    11,    12,    15,    71,    92,    94,
-     108,   117,    19,    94,    20,   105,    76,    88,    88,    92,
-     108,    94,    49,    50,    51,    52,    53,    54,    55,    56,
+      17,   113,   116,    17,   115,   116,     4,    11,    13,    17,
+      76,    93,   109,   114,   117,    19,   113,   116,    19,   116,
+      19,     4,    11,    13,    50,   124,   125,    17,    71,    97,
+      99,    14,    48,    98,    17,    97,    48,    98,    16,    71,
+      71,    48,     4,    11,    13,    50,    64,    76,   142,    87,
+      87,    87,    53,    68,    11,    12,    15,    71,    93,    95,
+     109,   118,    19,    95,    20,   106,    76,    89,    89,    93,
+     109,    95,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    67,
-      68,    69,    92,   108,   147,    92,   108,    92,   108,    92,
-     108,    92,   108,    92,   108,    92,   108,    92,   108,    92,
-     108,    92,   108,    92,   108,    92,   108,    92,   108,    92,
-     108,    92,   108,    92,   108,    92,   108,    12,    92,   108,
-      12,    92,   108,    12,    92,   108,    12,    92,   108,    12,
-      92,   108,    12,    92,   108,    12,    92,   108,    12,    92,
-     108,    12,    92,   108,    12,    92,   108,    12,    92,   108,
-     144,    12,    94,    14,    71,    92,   147,    92,   108,    92,
-     108,    12,    92,   108,   144,     4,    11,    13,    76,   131,
-      17,    94,    92,   108,   147,    94,    71,    92,   147,    92,
-     108,    92,   108,    92,   108,    17,   115,    17,    17,     4,
-      13,    11,    92,   108,   113,    19,   115,    19,    19,     4,
-       4,   123,    50,    86,   121,    48,    17,    11,    15,    98,
-      71,     4,    11,    13,    76,    99,   146,    48,    17,    71,
-      99,    17,    96,    48,    97,    48,    92,   108,   136,     4,
-       4,     4,    11,    13,     4,    11,    13,     4,    86,   140,
-     143,    12,    92,   108,   117,    11,    15,    19,    71,    92,
-      88,    15,    92,   108,    15,    71,    92,     4,     4,   131,
-      56,    76,   132,   145,    15,    15,    17,    19,     4,    51,
-      52,    53,   125,   126,    71,    48,    71,    15,    97,     4,
-       4,     4,    86,   100,    71,    48,    97,   100,    48,    17,
-      71,    99,   136,     4,    11,    13,    64,   137,     4,     4,
-       4,     4,    53,    53,    12,    92,   108,   117,   132,    92,
-     108,     4,    53,    56,    57,   125,   129,    56,    76,     4,
-      11,    13,   101,    86,   122,    53,    97,    71,    99,    53,
-      59,    97,    71,    99,    53,    59,    71,    48,    97,   100,
-      15,     4,     4,     4,    86,   138,    53,   129,     4,    11,
-      13,    50,   134,   134,    92,   108,     4,    11,    13,   122,
-      92,   108,     4,     4,     4,   124,    53,    99,    97,   100,
-      99,    97,   100,    97,    71,    99,    53,    59,   137,    53,
-     122,     4,     4,     4,    11,    13,    86,   133,   133,   134,
-     134,     4,     4,    53,   134,   134,   121,   100,    99,    53,
-      59,   100,    99,    53,    59,    99,    97,   100,   138,    53,
-       4,     4,   133,   133,   133,   133,   125,   126,    53,    59,
-     100,    53,    59,   100,   100,    99,    53,    59,    53,   122,
-      53,    59,    53,    59,    53,    59,   100,    53,    59
+      68,    69,    93,   109,   148,    93,   109,    93,   109,    93,
+     109,    93,   109,    93,   109,    93,   109,    93,   109,    93,
+     109,    93,   109,    93,   109,    93,   109,    93,   109,    93,
+     109,    93,   109,    93,   109,    93,   109,    12,    93,   109,
+      12,    93,   109,    12,    93,   109,    12,    93,   109,    12,
+      93,   109,    12,    93,   109,    12,    93,   109,    12,    93,
+     109,    12,    93,   109,    12,    93,   109,    12,    93,   109,
+     145,    12,    95,    14,    71,    93,   148,    93,   109,    93,
+     109,    12,    93,   109,   145,     4,    11,    13,    76,   132,
+      17,    95,    93,   109,   148,    95,    71,    93,   148,    93,
+     109,    93,   109,    93,   109,    17,   116,    17,    17,     4,
+      13,    11,    93,   109,   114,    19,   116,    19,    19,     4,
+       4,   124,    50,    87,   122,    48,    17,    11,    15,    99,
+      71,     4,    11,    13,    76,   100,   147,    48,    17,    71,
+     100,    17,    97,    48,    98,    48,    93,   109,   137,     4,
+       4,     4,    11,    13,     4,    11,    13,     4,    87,   141,
+     144,    12,    93,   109,   118,    11,    15,    19,    71,    93,
+      89,    15,    93,   109,    15,    71,    93,     4,     4,   132,
+      56,    76,   133,   146,    15,    15,    17,    19,     4,    51,
+      52,    53,   126,   127,    71,    48,    71,    15,    98,     4,
+       4,     4,    87,   101,    71,    48,    98,   101,    48,    17,
+      71,   100,   137,     4,    11,    13,    64,   138,     4,     4,
+       4,     4,    53,    53,    12,    93,   109,   118,   133,    93,
+     109,     4,    53,    56,    57,   126,   130,    56,    76,     4,
+      11,    13,   102,    87,   123,    53,    98,    71,   100,    53,
+      59,    98,    71,   100,    53,    59,    71,    48,    98,   101,
+      15,     4,     4,     4,    87,   139,    53,   130,     4,    11,
+      13,    50,   135,   135,    93,   109,     4,    11,    13,   123,
+      93,   109,     4,     4,     4,   125,    53,   100,    98,   101,
+     100,    98,   101,    98,    71,   100,    53,    59,   138,    53,
+     123,     4,     4,     4,    11,    13,    87,   134,   134,   135,
+     135,     4,     4,    53,   135,   135,   122,   101,   100,    53,
+      59,   101,   100,    53,    59,   100,    98,   101,   139,    53,
+       4,     4,   134,   134,   134,   134,   126,   127,    53,    59,
+     101,    53,    59,   101,   101,   100,    53,    59,    53,   123,
+      53,    59,    53,    59,    53,    59,   101,    53,    59
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    84,    85,    85,    85,    85,    86,    86,    86,    86,
-      86,    87,    87,    87,    87,    88,    88,    88,    88,    88,
-      88,    89,    89,    89,    89,    89,    89,    89,    89,    89,
-      89,    89,    89,    89,    89,    89,    90,    90,    91,    91,
-      91,    91,    91,    91,    91,    91,    91,    91,    91,    91,
-      91,    92,    92,    93,    93,    93,    93,    94,    94,    94,
-      94,    94,    94,    94,    94,    94,    94,    94,    94,    94,
-      94,    95,    95,    95,    95,    95,    95,    95,    95,    95,
+       0,    85,    86,    86,    86,    86,    87,    87,    87,    87,
+      87,    88,    88,    88,    88,    89,    89,    89,    89,    89,
+      89,    90,    90,    90,    90,    90,    90,    90,    90,    90,
+      90,    90,    90,    90,    90,    90,    91,    91,    92,    92,
+      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
+      92,    93,    93,    94,    94,    94,    94,    95,    95,    95,
       95,    95,    95,    95,    95,    95,    95,    95,    95,    95,
-      95,    95,    95,    95,    95,    96,    97,    97,    97,    98,
-      98,    99,    99,    99,    99,    99,   100,   100,   101,   101,
-     102,   102,   103,   103,   103,   103,   103,   103,   103,   103,
-     103,   103,   103,   103,   103,   103,   103,   103,   103,   103,
-     103,   103,   103,   103,   103,   103,   103,   103,   103,   103,
+      95,    96,    96,    96,    96,    96,    96,    96,    96,    96,
+      96,    96,    96,    96,    96,    96,    96,    96,    96,    96,
+      96,    96,    96,    96,    96,    97,    98,    98,    98,    99,
+      99,   100,   100,   100,   100,   100,   101,   101,   102,   102,
      103,   103,   104,   104,   104,   104,   104,   104,   104,   104,
      104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+     104,   104,   105,   105,   105,   105,   105,   105,   105,   105,
      105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   106,   106,
-     107,   107,   107,   108,   108,   108,   108,   108,   108,   108,
-     108,   108,   108,   108,   108,   108,   108,   108,   108,   108,
-     108,   108,   108,   108,   108,   108,   108,   108,   108,   109,
-     109,   109,   109,   109,   109,   110,   110,   110,   110,   110,
-     110,   110,   110,   111,   111,   111,   111,   111,   111,   111,
-     111,   112,   112,   113,   113,   113,   113,   114,   114,   115,
-     115,   115,   115,   115,   115,   115,   115,   116,   116,   117,
-     117,   117,   117,   117,   117,   117,   117,   118,   118,   118,
-     118,   118,   118,   118,   118,   118,   118,   119,   120,   120,
-     120,   121,   121,   122,   122,   123,   123,   123,   123,   123,
-     124,   124,   124,   124,   124,   124,   125,   125,   125,   125,
-     125,   125,   126,   126,   126,   127,   127,   127,   127,   128,
-     128,   129,   129,   129,   129,   129,   129,   129,   130,   130,
-     131,   131,   131,   131,   131,   132,   132,   132,   132,   132,
-     132,   133,   133,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   135,   135,   136,   136,   137,
-     137,   137,   137,   137,   137,   137,   137,   138,   138,   139,
-     140,   140,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     142,   142,   143,   143,   143,   143,   143,   143,   144,   144,
-     144,   145,   145,   146,   146,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     106,   106,   106,   106,   106,   106,   106,   106,   107,   107,
+     108,   108,   108,   109,   109,   109,   109,   109,   109,   109,
+     109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
+     109,   109,   109,   109,   109,   109,   109,   109,   109,   110,
+     110,   110,   110,   110,   110,   111,   111,   111,   111,   111,
+     111,   111,   111,   112,   112,   112,   112,   112,   112,   112,
+     112,   113,   113,   114,   114,   114,   114,   115,   115,   116,
+     116,   116,   116,   116,   116,   116,   116,   117,   117,   118,
+     118,   118,   118,   118,   118,   118,   118,   119,   119,   119,
+     119,   119,   119,   119,   119,   119,   119,   120,   121,   121,
+     121,   122,   122,   123,   123,   124,   124,   124,   124,   124,
+     125,   125,   125,   125,   125,   125,   126,   126,   126,   126,
+     126,   126,   127,   127,   127,   128,   128,   128,   128,   129,
+     129,   130,   130,   130,   130,   130,   130,   130,   131,   131,
+     132,   132,   132,   132,   132,   133,   133,   133,   133,   133,
+     133,   134,   134,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   136,   136,   137,   137,   138,
+     138,   138,   138,   138,   138,   138,   138,   139,   139,   140,
+     141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     143,   143,   144,   144,   144,   144,   144,   144,   145,   145,
+     145,   146,   146,   147,   147,   148,   148,   148,   148,   148,
+     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
+     148,   148,   148,   148,   148
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -3900,7 +3902,7 @@ yyreduce:
 
   case 144:
 
-    { (yyval.t_exp) = new ast::OpExp((yyloc), *new ast::DoubleExp((yyloc), 0.0), ast::OpExp::unaryMinus, *(yyvsp[0].t_exp)); }
+    { if ((yyvsp[0].t_exp)->isDoubleExp()) { (yyval.t_exp) = (yyvsp[0].t_exp)->getAs<ast::DoubleExp>()->neg(); } else { (yyval.t_exp) = new ast::OpExp((yyloc), *new ast::DoubleExp((yyloc), 0.0), ast::OpExp::unaryMinus, *(yyvsp[0].t_exp)); } }
 
     break;
 
index 0615484..8929b98 100644 (file)
@@ -12,3 +12,6 @@ assert_checkequal([1, -a], [1 -a]);
 assert_checkequal([(1 - a)], [1 - a]);
 assert_checkequal([1, - a + 2], [1 -(a - 2)]);
 assert_checkequal([(1 - a + 2)], [1 - a + 2]);
+M = matrix(1:4, 2, 2); B = [2; 4];
+C = M^-1*B;
+assert_checkequal(C, [2;0]);
index bc3762f..585dd81 100644 (file)
@@ -14,3 +14,8 @@ assert_checkequal([1, -a], [1 -a]);
 assert_checkequal([(1 - a)], [1 - a]);
 assert_checkequal([1, - a + 2], [1 -(a - 2)]);
 assert_checkequal([(1 - a + 2)], [1 - a + 2]);
+
+M = matrix(1:4, 2, 2); B = [2; 4];
+C = M^-1*B;
+assert_checkequal(C, [2;0]);
+