Added collection length and mem test

This commit is contained in:
Denis Merigoux 2020-12-30 11:50:19 +01:00
parent 2cfb348274
commit be9e7e2a1e
23 changed files with 393 additions and 358 deletions

View File

@ -87,7 +87,7 @@ type binop =
type unop = Not | Minus of op_kind
type builtin_expression = Cardinal | Now
type builtin_expression = Cardinal
type aggregate_func = AggregateSum of primitive_typ | AggregateCount

View File

@ -410,7 +410,12 @@ let rec translate_expr (scope : Scopelang.Ast.ScopeName.t) (ctxt : Name_resoluti
( Scopelang.Ast.EAbs
( pos,
binder,
[ (Scopelang.Ast.TLit t, Pos.get_position op'); (Scopelang.Ast.TAny, pos) ] ),
[
(Scopelang.Ast.TLit t, Pos.get_position op');
(Scopelang.Ast.TAny, pos)
(* we put any here because the type of the elements of the arrays is not
always the type of the accumulator; for instance in AggregateCount. *);
] ),
pos ))
(Bindlib.bind_mvar [| acc_var; param |] f_body)
in
@ -429,6 +434,45 @@ let rec translate_expr (scope : Scopelang.Ast.ScopeName.t) (ctxt : Name_resoluti
((Scopelang.Ast.EOp (Dcalc.Ast.Ternop Dcalc.Ast.Fold), pos), [ f; init; collection ]),
pos ))
f collection init
| MemCollection (member, collection) ->
let param_var = Scopelang.Ast.Var.make ("collection_member", pos) in
let param = Scopelang.Ast.make_var (param_var, pos) in
let collection = rec_helper collection in
let init = Bindlib.box (Scopelang.Ast.ELit (Dcalc.Ast.LBool false), pos) in
let acc_var = Scopelang.Ast.Var.make ("acc", pos) in
let acc = Scopelang.Ast.make_var (acc_var, pos) in
let f_body =
Bindlib.box_apply3
(fun member acc param ->
( Scopelang.Ast.EApp
( (Scopelang.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.Or), pos),
[
( Scopelang.Ast.EApp
((Scopelang.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.Eq), pos), [ member; param ]),
pos );
acc;
] ),
pos ))
(translate_expr scope ctxt member)
acc param
in
let f =
Bindlib.box_apply
(fun binder ->
( Scopelang.Ast.EAbs
( pos,
binder,
[ (Scopelang.Ast.TLit Dcalc.Ast.TBool, pos); (Scopelang.Ast.TAny, pos) ] ),
pos ))
(Bindlib.bind_mvar [| acc_var; param_var |] f_body)
in
Bindlib.box_apply3
(fun f collection init ->
( Scopelang.Ast.EApp
((Scopelang.Ast.EOp (Dcalc.Ast.Ternop Dcalc.Ast.Fold), pos), [ f; init; collection ]),
pos ))
f collection init
| Builtin Cardinal -> Bindlib.box (Scopelang.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.Length), pos)
| _ ->
Name_resolution.raise_unsupported_feature "desugaring not implemented for this expression" pos

View File

@ -113,7 +113,6 @@ let token_list : (string * token) list =
("exists", EXISTS);
("such", SUCH);
("that", THAT);
("now", NOW);
("&&", AND);
("||", OR);
("not", NOT);
@ -279,9 +278,6 @@ let rec lex_code (lexbuf : lexbuf) : token =
| "that" ->
update_acc lexbuf;
THAT
| "now" ->
update_acc lexbuf;
NOW
| "&&" ->
update_acc lexbuf;
AND

View File

@ -67,7 +67,6 @@ let token_list_en : (string * token) list =
("exists", EXISTS);
("such", SUCH);
("that", THAT);
("now", NOW);
("and", AND);
("or", OR);
("not", NOT);
@ -236,9 +235,6 @@ let rec lex_code_en (lexbuf : lexbuf) : token =
| "that" ->
L.update_acc lexbuf;
THAT
| "now" ->
L.update_acc lexbuf;
NOW
| "and" ->
L.update_acc lexbuf;
AND

View File

@ -65,7 +65,6 @@ let token_list_fr : (string * token) list =
("existe", EXISTS);
("tel", SUCH);
("que", THAT);
("maintenant", NOW);
("et", AND);
("ou", OR);
("non", NOT);
@ -240,9 +239,6 @@ let rec lex_code_fr (lexbuf : lexbuf) : token =
| "que" ->
L.update_acc lexbuf;
THAT
| "maintenant" ->
L.update_acc lexbuf;
NOW
| "et" ->
L.update_acc lexbuf;
AND

File diff suppressed because it is too large Load Diff

View File

@ -47,7 +47,7 @@
%token LESSER_MONEY GREATER_MONEY LESSER_EQUAL_MONEY GREATER_EQUAL_MONEY
%token LESSER_DATE GREATER_DATE LESSER_EQUAL_DATE GREATER_EQUAL_DATE
%token LESSER_DURATION GREATER_DURATION LESSER_EQUAL_DURATION GREATER_EQUAL_DURATION
%token EXISTS IN SUCH THAT NOW
%token EXISTS IN SUCH THAT
%token DOT AND OR LPAREN RPAREN EQUAL
%token CARDINAL ASSERTION FIXED BY YEAR MONTH DAY
%token PLUS MINUS MULT DIV
@ -137,7 +137,6 @@ struct_or_enum_inject:
primitive_expression:
| e = small_expression { e }
| NOW { (Builtin Now, $sloc) }
| CARDINAL {
(Builtin Cardinal, $sloc)
}

View File

@ -13,11 +13,11 @@ let message s =
"expected another inclusion of a Catala file, since this file is a master file which can \
only contain inclusions of other Catala files\n"
| 8 -> "expected some text, another heading or a law article\n"
| 346 -> "expected a heading, an article title or some text\n"
| 331 -> "expected an article title, another heading or some text\n"
| 336 -> "expected a code block, a metadata block, more law text or a heading\n"
| 342 -> "expected a code block, a metadata block, more law text or a heading\n"
| 337 -> "expected a declaration or a scope use\n"
| 345 -> "expected a heading, an article title or some text\n"
| 330 -> "expected an article title, another heading or some text\n"
| 335 -> "expected a code block, a metadata block, more law text or a heading\n"
| 341 -> "expected a code block, a metadata block, more law text or a heading\n"
| 336 -> "expected a declaration or a scope use\n"
| 22 -> "expected the name of the scope you want to use\n"
| 24 -> "expected a scope use precondition or a colon\n"
| 25 -> "expected an expression which will act as the condition\n"
@ -27,138 +27,138 @@ let message s =
| 30 -> "expected a \"/\"\n"
| 31 -> "expected the third component of the date literal\n"
| 32 -> "expected a delimiter to finish the date literal\n"
| 67 -> "expected an operator to compose the expression on the left with\n"
| 73 -> "expected an enum constructor to test if the expression on the left\n"
| 72 -> "expected an operator to compose the expression on the left with\n"
| 128 -> "expected an expression on the right side of the sum or minus operator\n"
| 156 -> "expected an expression on the right side of the logical operator\n"
| 75 -> "expected an expression for the argument of this function call\n"
| 116 -> "expected an expression on the right side of the comparison operator\n"
| 137 -> "expected an expression on the right side of the multiplication or division operator\n"
| 130 -> "expected an operator to compose the expression on the left\n"
| 166 -> "expected an expression standing for the set you want to test for membership\n"
| 68 -> "expected an identifier standing for a struct field or a subscope name\n"
| 214 -> "expected a colon after the scope use precondition\n"
| 70 -> "expected a constructor, to get the payload of this enum case\n"
| 66 -> "expected an operator to compose the expression on the left with\n"
| 72 -> "expected an enum constructor to test if the expression on the left\n"
| 71 -> "expected an operator to compose the expression on the left with\n"
| 127 -> "expected an expression on the right side of the sum or minus operator\n"
| 155 -> "expected an expression on the right side of the logical operator\n"
| 74 -> "expected an expression for the argument of this function call\n"
| 115 -> "expected an expression on the right side of the comparison operator\n"
| 136 -> "expected an expression on the right side of the multiplication or division operator\n"
| 129 -> "expected an operator to compose the expression on the left\n"
| 165 -> "expected an expression standing for the set you want to test for membership\n"
| 67 -> "expected an identifier standing for a struct field or a subscope name\n"
| 213 -> "expected a colon after the scope use precondition\n"
| 69 -> "expected a constructor, to get the payload of this enum case\n"
| 35 -> "expected the \"for\" keyword to spell the aggregation\n"
| 150 -> "expected an expression to take the negation of\n"
| 64 -> "expected an expression to take the opposite of\n"
| 52 -> "expected an expression to match with\n"
| 198 -> "expected a pattern matching case\n"
| 199 -> "expected the name of the constructor for the enum case in the pattern matching\n"
| 205 ->
| 149 -> "expected an expression to take the negation of\n"
| 63 -> "expected an expression to take the opposite of\n"
| 51 -> "expected an expression to match with\n"
| 197 -> "expected a pattern matching case\n"
| 198 -> "expected the name of the constructor for the enum case in the pattern matching\n"
| 204 ->
"expected a binding for the constructor payload, or a colon and the matching case expression\n"
| 206 -> "expected an identifier for this enum case binding\n"
| 202 -> "expected a colon and then the expression for this matching case\n"
| 208 -> "expected a colon or a binding for the enum constructor payload\n"
| 203 -> "expected an expression for this pattern matching case\n"
| 200 ->
| 205 -> "expected an identifier for this enum case binding\n"
| 201 -> "expected a colon and then the expression for this matching case\n"
| 207 -> "expected a colon or a binding for the enum constructor payload\n"
| 202 -> "expected an expression for this pattern matching case\n"
| 199 ->
"expected another match case or the rest of the expression since the previous match case is \
complete\n"
| 197 -> "expected the \"with patter\" keyword to complete the pattern matching expression\n"
| 54 -> "expected an expression inside the parenthesis\n"
| 189 -> "unmatched parenthesis that should have been closed by here\n"
| 76 -> "expected a unit for this literal, or a valid operator to complete the expression \n"
| 56 -> "expected an expression for the test of the conditional\n"
| 185 -> "expected an expression the for the \"then\" branch of the conditiona\n"
| 186 ->
| 196 -> "expected the \"with patter\" keyword to complete the pattern matching expression\n"
| 53 -> "expected an expression inside the parenthesis\n"
| 188 -> "unmatched parenthesis that should have been closed by here\n"
| 75 -> "expected a unit for this literal, or a valid operator to complete the expression \n"
| 55 -> "expected an expression for the test of the conditional\n"
| 184 -> "expected an expression the for the \"then\" branch of the conditiona\n"
| 185 ->
"expected the \"else\" branch of this conditional expression as the \"then\" branch is \
complete\n"
| 187 -> "expected an expression for the \"else\" branch of this conditional construction\n"
| 184 -> "expected the \"then\" keyword as the conditional expression is complete\n"
| 58 ->
| 186 -> "expected an expression for the \"else\" branch of this conditional construction\n"
| 183 -> "expected the \"then\" keyword as the conditional expression is complete\n"
| 57 ->
"expected the \"all\" keyword to mean the \"for all\" construction of the universal test\n"
| 170 -> "expected an identifier for the bound variable of the universal test\n"
| 171 -> "expected the \"in\" keyword for the rest of the universal test\n"
| 172 -> "expected the expression designating the set on which to perform the universal test\n"
| 173 -> "expected the \"we have\" keyword for this universal test\n"
| 169 -> "expected an expression for the universal test\n"
| 178 -> "expected an identifier that will designate the existential witness for the test\n"
| 179 -> "expected the \"in\" keyword to continue this existential test\n"
| 180 -> "expected an expression that designates the set subject to the existential test\n"
| 181 -> "expected a keyword to form the \"such that\" expression for the existential test\n"
| 182 -> "expected a keyword to complete the \"such that\" construction\n"
| 176 -> "expected an expression for the existential test\n"
| 85 ->
| 169 -> "expected an identifier for the bound variable of the universal test\n"
| 170 -> "expected the \"in\" keyword for the rest of the universal test\n"
| 171 -> "expected the expression designating the set on which to perform the universal test\n"
| 172 -> "expected the \"we have\" keyword for this universal test\n"
| 168 -> "expected an expression for the universal test\n"
| 177 -> "expected an identifier that will designate the existential witness for the test\n"
| 178 -> "expected the \"in\" keyword to continue this existential test\n"
| 179 -> "expected an expression that designates the set subject to the existential test\n"
| 180 -> "expected a keyword to form the \"such that\" expression for the existential test\n"
| 181 -> "expected a keyword to complete the \"such that\" construction\n"
| 175 -> "expected an expression for the existential test\n"
| 84 ->
"expected a payload for the enum case constructor, or the rest of the expression (with an \
operator ?)\n"
| 86 -> "expected structure fields introduced by --\n"
| 87 -> "expected the name of the structure field\n"
| 91 -> "expected a colon\n"
| 92 -> "expected the expression for this struct field\n"
| 88 -> "expected another structure field or the closing bracket\n"
| 89 -> "expected the name of the structure field\n"
| 160 -> "expected an expression for the content of this enum case\n"
| 161 ->
| 85 -> "expected structure fields introduced by --\n"
| 86 -> "expected the name of the structure field\n"
| 90 -> "expected a colon\n"
| 91 -> "expected the expression for this struct field\n"
| 87 -> "expected another structure field or the closing bracket\n"
| 88 -> "expected the name of the structure field\n"
| 159 -> "expected an expression for the content of this enum case\n"
| 160 ->
"the expression for the content of the enum case is already well-formed, expected an \
operator to form a bigger expression\n"
| 63 -> "expected the keyword following cardinal to compute the number of elements in a set\n"
| 215 -> "expected a scope use item: a rule, definition or assertion\n"
| 250 -> "expected the name of the variable subject to the rule\n"
| 228 ->
| 62 -> "expected the keyword following cardinal to compute the number of elements in a set\n"
| 214 -> "expected a scope use item: a rule, definition or assertion\n"
| 249 -> "expected the name of the variable subject to the rule\n"
| 227 ->
"expected a condition or a consequence for this rule, or the rest of the variable qualified \
name\n"
| 257 -> "expected a condition or a consequence for this rule\n"
| 252 -> "expected filled or not filled for a rule consequence\n"
| 258 -> "expected the name of the parameter for this dependent variable \n"
| 251 -> "expected the expression of the rule\n"
| 255 -> "expected the filled keyword the this rule \n"
| 229 -> "expected a struct field or a sub-scope context item after the dot\n"
| 216 -> "expected the name of the label\n"
| 246 -> "expected a rule or a definition after the label declaration\n"
| 247 -> "expected the label to which the exception is referring back\n"
| 249 -> "expected a rule or a definition after the exception declaration\n"
| 262 -> "expected the name of the variable you want to define\n"
| 263 -> "expected the defined as keyword to introduce the definition of this variable\n"
| 265 -> "expected an expression for the consequence of this definition under condition\n"
| 264 ->
| 256 -> "expected a condition or a consequence for this rule\n"
| 251 -> "expected filled or not filled for a rule consequence\n"
| 257 -> "expected the name of the parameter for this dependent variable \n"
| 250 -> "expected the expression of the rule\n"
| 254 -> "expected the filled keyword the this rule \n"
| 228 -> "expected a struct field or a sub-scope context item after the dot\n"
| 215 -> "expected the name of the label\n"
| 245 -> "expected a rule or a definition after the label declaration\n"
| 246 -> "expected the label to which the exception is referring back\n"
| 248 -> "expected a rule or a definition after the exception declaration\n"
| 261 -> "expected the name of the variable you want to define\n"
| 262 -> "expected the defined as keyword to introduce the definition of this variable\n"
| 264 -> "expected an expression for the consequence of this definition under condition\n"
| 263 ->
"expected a expression for defining this function, introduced by the defined as keyword\n"
| 266 -> "expected an expression for the definition\n"
| 218 -> "expected an expression that shoud be asserted during execution\n"
| 219 -> "expecting the name of the varying variable\n"
| 222 -> "the variable varies with an expression that was expected here\n"
| 223 -> "expected an indication about the variation sense of the variable, or a new scope item\n"
| 221 -> "expected an indication about what this variable varies with\n"
| 231 -> "expected an expression for this condition\n"
| 241 -> "expected a consequence for this definition under condition\n"
| 237 -> "expected an expression for this definition under condition\n"
| 233 -> "expected the name of the variable that should be fixed\n"
| 265 -> "expected an expression for the definition\n"
| 217 -> "expected an expression that shoud be asserted during execution\n"
| 218 -> "expecting the name of the varying variable\n"
| 221 -> "the variable varies with an expression that was expected here\n"
| 222 -> "expected an indication about the variation sense of the variable, or a new scope item\n"
| 220 -> "expected an indication about what this variable varies with\n"
| 230 -> "expected an expression for this condition\n"
| 240 -> "expected a consequence for this definition under condition\n"
| 236 -> "expected an expression for this definition under condition\n"
| 232 -> "expected the name of the variable that should be fixed\n"
| 233 -> "expected the legislative text by which the value of the variable is fixed\n"
| 234 -> "expected the legislative text by which the value of the variable is fixed\n"
| 235 -> "expected the legislative text by which the value of the variable is fixed\n"
| 244 -> "expected a new scope use item \n"
| 273 -> "expected the kind of the declaration (struct, scope or enum)\n"
| 274 -> "expected the struct name\n"
| 275 -> "expected a colon\n"
| 276 -> "expected struct data or condition\n"
| 277 -> "expected the name of this struct data \n"
| 278 -> "expected the type of this struct data, introduced by the content keyword\n"
| 279 -> "expected the type of this struct data\n"
| 293 -> "expected the name of this struct condition\n"
| 286 -> "expected a new struct data, or another declaration or scope use\n"
| 287 -> "expected the type of the parameter of this struct data function\n"
| 291 -> "expected a new struct data, or another declaration or scope use\n"
| 283 -> "expected a new struct data, or another declaration or scope use\n"
| 296 -> "expected the name of the scope you are declaring\n"
| 297 -> "expected a colon followed by the list of context items of this scope\n"
| 298 -> "expected a context item introduced by \"context\"\n"
| 299 -> "expected the name of this new context item\n"
| 300 -> "expected the kind of this context item: is it a condition, a sub-scope or a data?\n"
| 301 -> "expected the name of the subscope for this context item\n"
| 308 -> "expected another scope context item or the end of the scope declaration\n"
| 303 -> "expected the type of this context item\n"
| 304 -> "expected the next context item or a dependency declaration for this item\n"
| 306 -> "expected the next context item or a dependency declaration for this item\n"
| 311 -> "expected the name of your enum\n"
| 312 -> "expected a colon\n"
| 313 -> "expected an enum case\n"
| 314 -> "expected the name of an enum case \n"
| 315 -> "expected a payload for your enum case, or another case or declaration \n"
| 316 -> "expected a content type\n"
| 321 -> "expected another enum case, or a new declaration or scope use\n"
| 243 -> "expected a new scope use item \n"
| 272 -> "expected the kind of the declaration (struct, scope or enum)\n"
| 273 -> "expected the struct name\n"
| 274 -> "expected a colon\n"
| 275 -> "expected struct data or condition\n"
| 276 -> "expected the name of this struct data \n"
| 277 -> "expected the type of this struct data, introduced by the content keyword\n"
| 278 -> "expected the type of this struct data\n"
| 292 -> "expected the name of this struct condition\n"
| 285 -> "expected a new struct data, or another declaration or scope use\n"
| 286 -> "expected the type of the parameter of this struct data function\n"
| 290 -> "expected a new struct data, or another declaration or scope use\n"
| 282 -> "expected a new struct data, or another declaration or scope use\n"
| 295 -> "expected the name of the scope you are declaring\n"
| 296 -> "expected a colon followed by the list of context items of this scope\n"
| 297 -> "expected a context item introduced by \"context\"\n"
| 298 -> "expected the name of this new context item\n"
| 299 -> "expected the kind of this context item: is it a condition, a sub-scope or a data?\n"
| 300 -> "expected the name of the subscope for this context item\n"
| 307 -> "expected another scope context item or the end of the scope declaration\n"
| 302 -> "expected the type of this context item\n"
| 303 -> "expected the next context item or a dependency declaration for this item\n"
| 305 -> "expected the next context item or a dependency declaration for this item\n"
| 310 -> "expected the name of your enum\n"
| 311 -> "expected a colon\n"
| 312 -> "expected an enum case\n"
| 313 -> "expected the name of an enum case \n"
| 314 -> "expected a payload for your enum case, or another case or declaration \n"
| 315 -> "expected a content type\n"
| 320 -> "expected another enum case, or a new declaration or scope use\n"
| 18 -> "expected a declaration or a scope use\n"
| 19 -> "expected some text or the beginning of a code section\n"
| 20 -> "expected a declaration or a scope use\n"
| 21 -> "should not happen\n"
| 326 -> "expected a metadata-closing tag\n"
| 327 -> "expected a metadata-closing tag\n"
| 328 -> "expected a metadata-closing tag\n"
| _ -> raise Not_found

View File

@ -78,7 +78,7 @@ ace.define("ace/mode/catala_en_highlighting_rules", ["require", "exports", "modu
},
{
"token": "support.type",
"regex": "\\b(integer|boolean|date|money|text|decimal|number|sum|now)\\b"
"regex": "\\b(integer|boolean|date|money|text|decimal|number|sum)\\b"
},
{
"token": ["entity.name.class", "punctuation", "entity.name.function"],

View File

@ -124,7 +124,7 @@
'name' : 'keyword.operator.catala_en'
}
{
'match' : '\\b(integer|boolean|date|money|text|decimal|number|sum|now)\\b'
'match' : '\\b(integer|boolean|date|money|text|decimal|number|sum)\\b'
'name' : 'support.type.catala_en'
}
{

View File

@ -245,7 +245,7 @@ code : context {
}
: pattern {
regex \= \b(integer|boolean|date|money|text|decimal|number|sum|now)\b
regex \= \b(integer|boolean|date|money|text|decimal|number|sum)\b
styles [] = .primitive;
}

View File

@ -35,7 +35,7 @@ class CatalaEnLexer(RegexLexer):
Operator)),
(u'(\\-\\>|\\+|\\-|\\*|/|\\!|not|or|and|=|>|<|\$|%|year|month|day)',
bygroups(Operator)),
(u'\\b(integer|boolean|date|money|text|decimal|number|sum|now)\\b',
(u'\\b(integer|boolean|date|money|text|decimal|number|sum)\\b',
bygroups(Keyword.Type)),
(u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class, Operator, Name.Variable)),
(u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\'\\.]*)\\b', bygroups(Name.Variable, Operator, Text)),

View File

@ -197,7 +197,7 @@
</dict>
<dict>
<key>match</key>
<string>\b(integer|boolean|date|money|text|decimal|number|sum|now)\b</string>
<string>\b(integer|boolean|date|money|text|decimal|number|sum)\b</string>
<key>name</key>
<string>support.type.catala_en</string>
</dict>

View File

@ -78,7 +78,7 @@ ace.define("ace/mode/catala_fr_highlighting_rules", ["require", "exports", "modu
},
{
"token": "support.type",
"regex": "\\b(entier|bool\u00e9en|date|argent|texte|d\u00e9cimal|d\u00e9cret|loi|nombre|somme|date_aujourd_hui)\\b"
"regex": "\\b(entier|bool\u00e9en|date|argent|texte|d\u00e9cimal|d\u00e9cret|loi|nombre|somme)\\b"
},
{
"token": ["entity.name.class", "punctuation", "entity.name.function"],

View File

@ -124,7 +124,7 @@
'name' : 'keyword.operator.catala_fr'
}
{
'match' : '\\b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme|date_aujourd_hui)\\b'
'match' : '\\b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme)\\b'
'name' : 'support.type.catala_fr'
}
{

View File

@ -245,7 +245,7 @@ code : context {
}
: pattern {
regex \= \b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme|date_aujourd_hui)\b
regex \= \b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme)\b
styles [] = .primitive;
}

View File

@ -35,7 +35,7 @@ class CatalaFrLexer(RegexLexer):
Operator)),
(u'(\\-\\>|\\+|\\-|\\*|/|\\!|non|ou|et|=|>|<|\u20ac|%|an|mois|jour)',
bygroups(Operator)),
(u'\\b(entier|bool\xe9en|date|argent|texte|d\xe9cimal|d\xe9cret|loi|nombre|somme|date_aujourd_hui)\\b',
(u'\\b(entier|bool\xe9en|date|argent|texte|d\xe9cimal|d\xe9cret|loi|nombre|somme)\\b',
bygroups(Keyword.Type)),
(u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class, Operator, Name.Variable)),
(u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xf4\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xd4\xca\u0152\xc70-9_\\\'\\.]*)\\b', bygroups(Name.Variable, Operator, Text)),

View File

@ -197,7 +197,7 @@
</dict>
<dict>
<key>match</key>
<string>\b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme|date_aujourd_hui)\b</string>
<string>\b(entier|booléen|date|argent|texte|décimal|décret|loi|nombre|somme)\b</string>
<key>name</key>
<string>support.type.catala_fr</string>
</dict>

View File

@ -124,7 +124,7 @@
'name' : 'keyword.operator.catala_nv'
}
{
'match' : '\\b(int|bool|date|money|text|decimal|number|sum|now)\\b'
'match' : '\\b(int|bool|date|money|text|decimal|number|sum)\\b'
'name' : 'support.type.catala_nv'
}
{

View File

@ -245,7 +245,7 @@ code : context {
}
: pattern {
regex \= \b(int|bool|date|money|text|decimal|number|sum|now)\b
regex \= \b(int|bool|date|money|text|decimal|number|sum)\b
styles [] = .primitive;
}

View File

@ -35,7 +35,7 @@ class CatalaNvLexer(RegexLexer):
bygroups(Operator)),
(u'(\\-\\>|\\+|\\-|\\*|/|\\!|not|or|and|=|>|<|\\$|%|year|month|day)',
bygroups(Operator)),
(u'\\b(int|bool|date|money|text|decimal|number|sum|now)\\b',
(u'\\b(int|bool|date|money|text|decimal|number|sum)\\b',
bygroups(Keyword.Type)),
(u'\\b([A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)\\b', bygroups(Name.Class, Operator, Name.Variable)),
(u'\\b([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\']*)(\\.)([a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7][a-z\xe9\xe8\xe0\xe2\xf9\xee\xea\u0153\xe7A-Z\xc9\xc8\xc0\xc2\xd9\xce\xca\u0152\xc70-9_\\\'\\.]*)\\b', bygroups(Name.Variable, Operator, Text)),

View File

@ -197,7 +197,7 @@
</dict>
<dict>
<key>match</key>
<string>\b(int|bool|date|money|text|decimal|number|sum|now)\b</string>
<string>\b(int|bool|date|money|text|decimal|number|sum)\b</string>
<key>name</key>
<string>support.type.catala_nv</string>
</dict>

View File

@ -9,10 +9,14 @@ scope A:
new scope B:
param a scope A
param v content int
param w content bool
param y content bool
param z content bool
scope B:
def v := number of a.x
def w := 64 in a.x
def y := exists m in a.x such that m = 9
def z := for all m in a.x we have m > 0
*/