mirror of
https://github.com/CatalaLang/catala.git
synced 2024-11-08 07:51:43 +03:00
Factorise lexer translations
This commit is contained in:
parent
7cbb4a9149
commit
e431e194de
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -3,3 +3,4 @@ french_law/js/french_law.js binary
|
||||
french_law/ocaml/law_source/allocations_familiales.ml binary
|
||||
french_law/ocaml/law_source/unit_tests/tests_allocations_famiales.ml binary
|
||||
french_law/python/src/allocations_familiales.py binary
|
||||
compiler/surface/lexer*.cppo.ml text encoding=latin-1
|
||||
|
@ -14,6 +14,21 @@
|
||||
(preprocess
|
||||
(pps sedlex.ppx visitors.ppx)))
|
||||
|
||||
(rule
|
||||
(with-stdout-to
|
||||
lexer_en.ml
|
||||
(run %{bin:cppo} %{dep:lexer_en.cppo.ml} %{dep:lexer.cppo.ml})))
|
||||
|
||||
(rule
|
||||
(with-stdout-to
|
||||
lexer_fr.ml
|
||||
(run %{bin:cppo} %{dep:lexer_fr.cppo.ml} %{dep:lexer.cppo.ml})))
|
||||
|
||||
(rule
|
||||
(with-stdout-to
|
||||
lexer_pl.ml
|
||||
(run %{bin:cppo} %{dep:lexer_pl.cppo.ml} %{dep:lexer.cppo.ml})))
|
||||
|
||||
(menhir
|
||||
(modules tokens)
|
||||
(flags --only-tokens))
|
||||
|
@ -18,83 +18,292 @@ open Utils
|
||||
module L = Lexer_common
|
||||
module R = Re.Pcre
|
||||
|
||||
(** Same as {!val: Surface.Lexer_common.token_list_language_agnostic}, but with tokens specialized
|
||||
to Polish. *)
|
||||
(* The localised strings and regexps for the tokens and specific parsing rules
|
||||
are defined as CPPO macros in the `lexer_XX.cppo.ml` files.
|
||||
|
||||
- `MS_*` macros define token strings
|
||||
- `MR_*` are sedlex regexps matching the token (inferred from the strings if absent,
|
||||
but should be present for any token containing spacing, and for any non-latin1
|
||||
character)
|
||||
- `MX_*` are full matching rules of the form `sedlex regexp -> ocaml expression`
|
||||
*)
|
||||
|
||||
(* Avoid the need for defining the regexps when they are simple strings *)
|
||||
#ifndef MR_SCOPE
|
||||
#define MR_SCOPE MS_SCOPE
|
||||
#endif
|
||||
#ifndef MR_CONSEQUENCE
|
||||
#define MR_CONSEQUENCE MS_CONSEQUENCE
|
||||
#endif
|
||||
#ifndef MR_DATA
|
||||
#define MR_DATA MS_DATA
|
||||
#endif
|
||||
#ifndef MR_DEPENDS
|
||||
#define MR_DEPENDS MS_DEPENDS
|
||||
#endif
|
||||
#ifndef MR_DECLARATION
|
||||
#define MR_DECLARATION MS_DECLARATION
|
||||
#endif
|
||||
#ifndef MR_CONTEXT
|
||||
#define MR_CONTEXT MS_CONTEXT
|
||||
#endif
|
||||
#ifndef MR_DECREASING
|
||||
#define MR_DECREASING MS_DECREASING
|
||||
#endif
|
||||
#ifndef MR_INCREASING
|
||||
#define MR_INCREASING MS_INCREASING
|
||||
#endif
|
||||
#ifndef MR_OF
|
||||
#define MR_OF MS_OF
|
||||
#endif
|
||||
#ifndef MR_COLLECTION
|
||||
#define MR_COLLECTION MS_COLLECTION
|
||||
#endif
|
||||
#ifndef MR_ENUM
|
||||
#define MR_ENUM MS_ENUM
|
||||
#endif
|
||||
#ifndef MR_INTEGER
|
||||
#define MR_INTEGER MS_INTEGER
|
||||
#endif
|
||||
#ifndef MR_MONEY
|
||||
#define MR_MONEY MS_MONEY
|
||||
#endif
|
||||
#ifndef MR_TEXT
|
||||
#define MR_TEXT MS_TEXT
|
||||
#endif
|
||||
#ifndef MR_DECIMAL
|
||||
#define MR_DECIMAL MS_DECIMAL
|
||||
#endif
|
||||
#ifndef MR_DATE
|
||||
#define MR_DATE MS_DATE
|
||||
#endif
|
||||
#ifndef MR_DURATION
|
||||
#define MR_DURATION MS_DURATION
|
||||
#endif
|
||||
#ifndef MR_BOOLEAN
|
||||
#define MR_BOOLEAN MS_BOOLEAN
|
||||
#endif
|
||||
#ifndef MR_SUM
|
||||
#define MR_SUM MS_SUM
|
||||
#endif
|
||||
#ifndef MR_FILLED
|
||||
#define MR_FILLED MS_FILLED
|
||||
#endif
|
||||
#ifndef MR_DEFINITION
|
||||
#define MR_DEFINITION MS_DEFINITION
|
||||
#endif
|
||||
#ifndef MR_LABEL
|
||||
#define MR_LABEL MS_LABEL
|
||||
#endif
|
||||
#ifndef MR_EXCEPTION
|
||||
#define MR_EXCEPTION MS_EXCEPTION
|
||||
#endif
|
||||
#ifndef MR_DEFINED_AS
|
||||
#define MR_DEFINED_AS MS_DEFINED_AS
|
||||
#endif
|
||||
#ifndef MR_MATCH
|
||||
#define MR_MATCH MS_MATCH
|
||||
#endif
|
||||
#ifndef MR_WILDCARD
|
||||
#define MR_WILDCARD MS_WILDCARD
|
||||
#endif
|
||||
#ifndef MR_WITH
|
||||
#define MR_WITH MS_WITH
|
||||
#endif
|
||||
#ifndef MR_UNDER_CONDITION
|
||||
#define MR_UNDER_CONDITION MS_UNDER_CONDITION
|
||||
#endif
|
||||
#ifndef MR_IF
|
||||
#define MR_IF MS_IF
|
||||
#endif
|
||||
#ifndef MR_THEN
|
||||
#define MR_THEN MS_THEN
|
||||
#endif
|
||||
#ifndef MR_ELSE
|
||||
#define MR_ELSE MS_ELSE
|
||||
#endif
|
||||
#ifndef MR_CONDITION
|
||||
#define MR_CONDITION MS_CONDITION
|
||||
#endif
|
||||
#ifndef MR_CONTENT
|
||||
#define MR_CONTENT MS_CONTENT
|
||||
#endif
|
||||
#ifndef MR_STRUCT
|
||||
#define MR_STRUCT MS_STRUCT
|
||||
#endif
|
||||
#ifndef MR_ASSERTION
|
||||
#define MR_ASSERTION MS_ASSERTION
|
||||
#endif
|
||||
#ifndef MR_VARIES
|
||||
#define MR_VARIES MS_VARIES
|
||||
#endif
|
||||
#ifndef MR_WITH_V
|
||||
#define MR_WITH_V MS_WITH_V
|
||||
#endif
|
||||
#ifndef MR_FOR
|
||||
#define MR_FOR MS_FOR
|
||||
#endif
|
||||
#ifndef MR_ALL
|
||||
#define MR_ALL MS_ALL
|
||||
#endif
|
||||
#ifndef MR_WE_HAVE
|
||||
#define MR_WE_HAVE MS_WE_HAVE
|
||||
#endif
|
||||
#ifndef MR_FIXED
|
||||
#define MR_FIXED MS_FIXED
|
||||
#endif
|
||||
#ifndef MR_BY
|
||||
#define MR_BY MS_BY
|
||||
#endif
|
||||
#ifndef MR_RULE
|
||||
#define MR_RULE MS_RULE
|
||||
#endif
|
||||
#ifndef MR_EXISTS
|
||||
#define MR_EXISTS MS_EXISTS
|
||||
#endif
|
||||
#ifndef MR_IN
|
||||
#define MR_IN MS_IN
|
||||
#endif
|
||||
#ifndef MR_SUCH
|
||||
#define MR_SUCH MS_SUCH
|
||||
#endif
|
||||
#ifndef MR_THAT
|
||||
#define MR_THAT MS_THAT
|
||||
#endif
|
||||
#ifndef MR_AND
|
||||
#define MR_AND MS_AND
|
||||
#endif
|
||||
#ifndef MR_OR
|
||||
#define MR_OR MS_OR
|
||||
#endif
|
||||
#ifndef MR_XOR
|
||||
#define MR_XOR MS_XOR
|
||||
#endif
|
||||
#ifndef MR_NOT
|
||||
#define MR_NOT MS_NOT
|
||||
#endif
|
||||
#ifndef MR_MAXIMUM
|
||||
#define MR_MAXIMUM MS_MAXIMUM
|
||||
#endif
|
||||
#ifndef MR_MINIMUM
|
||||
#define MR_MINIMUM MS_MINIMUM
|
||||
#endif
|
||||
#ifndef MR_FILTER
|
||||
#define MR_FILTER MS_FILTER
|
||||
#endif
|
||||
#ifndef MR_MAP
|
||||
#define MR_MAP MS_MAP
|
||||
#endif
|
||||
#ifndef MR_INIT
|
||||
#define MR_INIT MS_INIT
|
||||
#endif
|
||||
#ifndef MR_CARDINAL
|
||||
#define MR_CARDINAL MS_CARDINAL
|
||||
#endif
|
||||
#ifndef MR_YEAR
|
||||
#define MR_YEAR MS_YEAR
|
||||
#endif
|
||||
#ifndef MR_MONTH
|
||||
#define MR_MONTH MS_MONTH
|
||||
#endif
|
||||
#ifndef MR_DAY
|
||||
#define MR_DAY MS_DAY
|
||||
#endif
|
||||
#ifndef MR_TRUE
|
||||
#define MR_TRUE MS_TRUE
|
||||
#endif
|
||||
#ifndef MR_FALSE
|
||||
#define MR_FALSE MS_FALSE
|
||||
#endif
|
||||
#ifndef MR_IntToDec
|
||||
#define MR_IntToDec MS_IntToDec
|
||||
#endif
|
||||
#ifndef MR_GetDay
|
||||
#define MR_GetDay MS_GetDay
|
||||
#endif
|
||||
#ifndef MR_GetMonth
|
||||
#define MR_GetMonth MS_GetMonth
|
||||
#endif
|
||||
#ifndef MR_GetYear
|
||||
#define MR_GetYear MS_GetYear
|
||||
#endif
|
||||
|
||||
let token_list : (string * token) list =
|
||||
[
|
||||
("zakres", SCOPE);
|
||||
("konsekwencja", CONSEQUENCE);
|
||||
("data", DATA);
|
||||
("zalezy od", DEPENDS);
|
||||
("deklaracja", DECLARATION);
|
||||
("kontekst", CONTEXT);
|
||||
("malejacy", DECREASING);
|
||||
("rosnacy", INCREASING);
|
||||
("z", OF);
|
||||
("kolekcja", COLLECTION);
|
||||
("enumeracja", ENUM);
|
||||
("calkowita", INTEGER);
|
||||
("pieniądze", MONEY);
|
||||
("tekst", TEXT);
|
||||
("dziesiętny", DECIMAL);
|
||||
("czas", DATE);
|
||||
("czas trwania", DURATION);
|
||||
("zerojedynkowy", BOOLEAN);
|
||||
("suma", SUM);
|
||||
("spelnione", FILLED);
|
||||
("definicja", DEFINITION);
|
||||
("etykieta", LABEL);
|
||||
("wyjątek", EXCEPTION);
|
||||
("wynosi", DEFINED_AS);
|
||||
("pasuje", MATCH);
|
||||
("ze wzorem", WITH);
|
||||
("cokolwiek", WILDCARD);
|
||||
("pod warunkiem", UNDER_CONDITION);
|
||||
("jezeli", IF);
|
||||
("wtedy", THEN);
|
||||
("inaczej", ELSE);
|
||||
("typu", CONTENT);
|
||||
("struktura", STRUCT);
|
||||
("asercja", ASSERTION);
|
||||
("rozna", VARIES);
|
||||
("wraz z", WITH_V);
|
||||
("dla", FOR);
|
||||
("wszystkie", ALL);
|
||||
("mamy", WE_HAVE);
|
||||
("staloprzecinkowa", FIXED);
|
||||
("przez", BY);
|
||||
("zasada", RULE);
|
||||
("istnieje", EXISTS);
|
||||
("takie ze", SUCH);
|
||||
("to", THAT);
|
||||
("i", AND);
|
||||
("lub", OR);
|
||||
("xor", XOR);
|
||||
("nie", NOT);
|
||||
("maximum", MAXIMUM);
|
||||
("minimum", MINIMUM);
|
||||
("filtr", FILTER);
|
||||
("mapuj", MAP);
|
||||
("poczatkowy", INIT);
|
||||
("liczba", CARDINAL);
|
||||
("rok", YEAR);
|
||||
("miesiac", MONTH);
|
||||
("dzien", DAY);
|
||||
("prawda", TRUE);
|
||||
("falsz", FALSE);
|
||||
(MS_SCOPE, SCOPE);
|
||||
(MS_CONSEQUENCE, CONSEQUENCE);
|
||||
(MS_DATA, DATA);
|
||||
(MS_DEPENDS, DEPENDS);
|
||||
(MS_DECLARATION, DECLARATION);
|
||||
(MS_CONTEXT, CONTEXT);
|
||||
(MS_DECREASING, DECREASING);
|
||||
(MS_INCREASING, INCREASING);
|
||||
(MS_OF, OF);
|
||||
(MS_COLLECTION, COLLECTION);
|
||||
(MS_ENUM, ENUM);
|
||||
(MS_INTEGER, INTEGER);
|
||||
(MS_MONEY, MONEY);
|
||||
(MS_TEXT, TEXT);
|
||||
(MS_DECIMAL, DECIMAL);
|
||||
(MS_DATE, DATE);
|
||||
(MS_DURATION, DURATION);
|
||||
(MS_BOOLEAN, BOOLEAN);
|
||||
(MS_SUM, SUM);
|
||||
(MS_FILLED, FILLED);
|
||||
(MS_DEFINITION, DEFINITION);
|
||||
(MS_LABEL, LABEL);
|
||||
(MS_EXCEPTION, EXCEPTION);
|
||||
(MS_DEFINED_AS, DEFINED_AS);
|
||||
(MS_MATCH, MATCH);
|
||||
(MS_WILDCARD, WILDCARD);
|
||||
(MS_WITH, WITH);
|
||||
(MS_UNDER_CONDITION, UNDER_CONDITION);
|
||||
(MS_IF, IF);
|
||||
(MS_THEN, THEN);
|
||||
(MS_ELSE, ELSE);
|
||||
(MS_CONDITION, CONDITION);
|
||||
(MS_CONTENT, CONTENT);
|
||||
(MS_STRUCT, STRUCT);
|
||||
(MS_ASSERTION, ASSERTION);
|
||||
(MS_VARIES, VARIES);
|
||||
(MS_WITH_V, WITH_V);
|
||||
(MS_FOR, FOR);
|
||||
(MS_ALL, ALL);
|
||||
(MS_WE_HAVE, WE_HAVE);
|
||||
(MS_FIXED, FIXED);
|
||||
(MS_BY, BY);
|
||||
(MS_RULE, RULE);
|
||||
(MS_EXISTS, EXISTS);
|
||||
(MS_IN, IN);
|
||||
(MS_SUCH, SUCH);
|
||||
(MS_THAT, THAT);
|
||||
(MS_AND, AND);
|
||||
(MS_OR, OR);
|
||||
(MS_XOR, XOR);
|
||||
(MS_NOT, NOT);
|
||||
(MS_MAXIMUM, MAXIMUM);
|
||||
(MS_MINIMUM, MINIMUM);
|
||||
(MS_FILTER, FILTER);
|
||||
(MS_MAP, MAP);
|
||||
(MS_INIT, INIT);
|
||||
(MS_CARDINAL, CARDINAL);
|
||||
(MS_YEAR, YEAR);
|
||||
(MS_MONTH, MONTH);
|
||||
(MS_DAY, DAY);
|
||||
(MS_TRUE, TRUE);
|
||||
(MS_FALSE, FALSE);
|
||||
]
|
||||
@ L.token_list_language_agnostic
|
||||
|
||||
(** Localised builtin functions
|
||||
|
||||
@note (EmileRolley): shouldn't the builtin functions also be translated ? *)
|
||||
let builtins : (string * Ast.builtin_expression) list =
|
||||
[
|
||||
("integer_to_decimal", IntToDec);
|
||||
("get_day", GetDay);
|
||||
("get_month", GetMonth);
|
||||
("get_year", GetYear);
|
||||
]
|
||||
(** Localised builtin functions *)
|
||||
let lex_builtin (s : string) : Ast.builtin_expression option =
|
||||
let lexbuf = Utf8.from_string s in
|
||||
match%sedlex lexbuf with
|
||||
| MS_IntToDec, eof -> Some IntToDec
|
||||
| MS_GetDay, eof -> Some GetDay
|
||||
| MS_GetMonth, eof -> Some GetMonth
|
||||
| MS_GetYear, eof -> Some GetYear
|
||||
| _ -> None
|
||||
|
||||
(** Regexp matching any digit character.
|
||||
|
||||
@ -125,215 +334,195 @@ let rec lex_code (lexbuf : lexbuf) : token =
|
||||
(* End of code section *)
|
||||
L.context := Law;
|
||||
END_CODE (Buffer.contents L.code_buffer)
|
||||
| "zakres" ->
|
||||
| MR_SCOPE ->
|
||||
L.update_acc lexbuf;
|
||||
SCOPE
|
||||
| "data" ->
|
||||
| MR_DATA ->
|
||||
L.update_acc lexbuf;
|
||||
DATA
|
||||
| "zalezy", space_plus, "od" ->
|
||||
| MR_DEPENDS ->
|
||||
L.update_acc lexbuf;
|
||||
DEPENDS
|
||||
| "deklaracja" ->
|
||||
| MR_DECLARATION ->
|
||||
L.update_acc lexbuf;
|
||||
DECLARATION
|
||||
| "kontekst" ->
|
||||
| MR_CONTEXT ->
|
||||
L.update_acc lexbuf;
|
||||
CONTEXT
|
||||
| "malejacy" ->
|
||||
| MR_DECREASING ->
|
||||
L.update_acc lexbuf;
|
||||
DECREASING
|
||||
| "rosnacy" ->
|
||||
| MR_INCREASING ->
|
||||
L.update_acc lexbuf;
|
||||
INCREASING
|
||||
| "z" ->
|
||||
| MR_OF ->
|
||||
L.update_acc lexbuf;
|
||||
OF
|
||||
| "kolekcja" ->
|
||||
| MR_COLLECTION ->
|
||||
L.update_acc lexbuf;
|
||||
COLLECTION
|
||||
| "enumeracja" ->
|
||||
| MR_ENUM ->
|
||||
L.update_acc lexbuf;
|
||||
ENUM
|
||||
| "calkowita" ->
|
||||
| MR_INTEGER ->
|
||||
L.update_acc lexbuf;
|
||||
INTEGER
|
||||
| "pieni", 0x0105, "dze" ->
|
||||
| MR_MONEY ->
|
||||
L.update_acc lexbuf;
|
||||
MONEY
|
||||
| "tekst" ->
|
||||
| MR_TEXT ->
|
||||
L.update_acc lexbuf;
|
||||
TEXT
|
||||
| "dziesi", 0x0119, "tny" ->
|
||||
| MR_DECIMAL ->
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL
|
||||
| "czas" ->
|
||||
| MR_DATE ->
|
||||
L.update_acc lexbuf;
|
||||
DATE
|
||||
| "czas", space_plus, "trwania" ->
|
||||
| MR_DURATION ->
|
||||
L.update_acc lexbuf;
|
||||
DURATION
|
||||
| "zerojedynkowy" ->
|
||||
| MR_BOOLEAN ->
|
||||
L.update_acc lexbuf;
|
||||
BOOLEAN
|
||||
| "suma" ->
|
||||
| MR_SUM ->
|
||||
L.update_acc lexbuf;
|
||||
SUM
|
||||
| "spelnione" ->
|
||||
| MR_FILLED ->
|
||||
L.update_acc lexbuf;
|
||||
FILLED
|
||||
| "definicja" ->
|
||||
| MR_DEFINITION ->
|
||||
L.update_acc lexbuf;
|
||||
DEFINITION
|
||||
| "etykieta" ->
|
||||
| MR_LABEL ->
|
||||
L.update_acc lexbuf;
|
||||
LABEL
|
||||
| "wyj", 0x0105, "tek" ->
|
||||
| MR_EXCEPTION ->
|
||||
L.update_acc lexbuf;
|
||||
EXCEPTION
|
||||
| "wynosi" ->
|
||||
| MR_DEFINED_AS ->
|
||||
L.update_acc lexbuf;
|
||||
DEFINED_AS
|
||||
| "pasuje" ->
|
||||
| MR_MATCH ->
|
||||
L.update_acc lexbuf;
|
||||
MATCH
|
||||
| "ze", space_plus, "wzorem" ->
|
||||
| MR_WITH ->
|
||||
L.update_acc lexbuf;
|
||||
WITH
|
||||
| "cokolwiek" ->
|
||||
| MR_WILDCARD ->
|
||||
L.update_acc lexbuf;
|
||||
WILDCARD
|
||||
| "pod", space_plus, "warunkiem" ->
|
||||
| MR_UNDER_CONDITION ->
|
||||
L.update_acc lexbuf;
|
||||
UNDER_CONDITION
|
||||
| "jezeli" ->
|
||||
| MR_IF ->
|
||||
L.update_acc lexbuf;
|
||||
IF
|
||||
| "konsekwencja" ->
|
||||
| MR_CONSEQUENCE ->
|
||||
L.update_acc lexbuf;
|
||||
CONSEQUENCE
|
||||
| "wtedy" ->
|
||||
| MR_THEN ->
|
||||
L.update_acc lexbuf;
|
||||
THEN
|
||||
| "inaczej" ->
|
||||
| MR_ELSE ->
|
||||
L.update_acc lexbuf;
|
||||
ELSE
|
||||
| "warunek" ->
|
||||
| MR_CONDITION ->
|
||||
L.update_acc lexbuf;
|
||||
CONDITION
|
||||
| "typu" ->
|
||||
| MR_CONTENT ->
|
||||
L.update_acc lexbuf;
|
||||
CONTENT
|
||||
| "struktura" ->
|
||||
| MR_STRUCT ->
|
||||
L.update_acc lexbuf;
|
||||
STRUCT
|
||||
| "asercja" ->
|
||||
| MR_ASSERTION ->
|
||||
L.update_acc lexbuf;
|
||||
ASSERTION
|
||||
| "rozna" ->
|
||||
| MR_VARIES ->
|
||||
L.update_acc lexbuf;
|
||||
VARIES
|
||||
| "wraz", space_plus, "z" ->
|
||||
| MR_WITH_V ->
|
||||
L.update_acc lexbuf;
|
||||
WITH_V
|
||||
| "dla" ->
|
||||
| MR_FOR ->
|
||||
L.update_acc lexbuf;
|
||||
FOR
|
||||
| "wszystkie" ->
|
||||
| MR_ALL ->
|
||||
L.update_acc lexbuf;
|
||||
ALL
|
||||
| "mamy" ->
|
||||
| MR_WE_HAVE ->
|
||||
L.update_acc lexbuf;
|
||||
WE_HAVE
|
||||
| "staloprzecinkowa" ->
|
||||
| MR_FIXED ->
|
||||
L.update_acc lexbuf;
|
||||
FIXED
|
||||
| "przez" ->
|
||||
| MR_BY ->
|
||||
L.update_acc lexbuf;
|
||||
BY
|
||||
| "zasada" ->
|
||||
(* 0xE8 is è *)
|
||||
| MR_RULE ->
|
||||
L.update_acc lexbuf;
|
||||
L.update_acc lexbuf;
|
||||
RULE
|
||||
| "istnieje" ->
|
||||
| MR_EXISTS ->
|
||||
L.update_acc lexbuf;
|
||||
EXISTS
|
||||
| "in" ->
|
||||
| MR_IN ->
|
||||
L.update_acc lexbuf;
|
||||
IN
|
||||
| "takie", space_plus, "ze" ->
|
||||
| MR_SUCH ->
|
||||
L.update_acc lexbuf;
|
||||
SUCH
|
||||
| "to" ->
|
||||
| MR_THAT ->
|
||||
L.update_acc lexbuf;
|
||||
THAT
|
||||
| "i" ->
|
||||
| MR_AND ->
|
||||
L.update_acc lexbuf;
|
||||
AND
|
||||
| "lub" ->
|
||||
| MR_OR ->
|
||||
L.update_acc lexbuf;
|
||||
OR
|
||||
| "xor" ->
|
||||
| MR_XOR ->
|
||||
L.update_acc lexbuf;
|
||||
XOR
|
||||
| "nie" ->
|
||||
| MR_NOT ->
|
||||
L.update_acc lexbuf;
|
||||
NOT
|
||||
| "maximum" ->
|
||||
| MR_MAXIMUM ->
|
||||
L.update_acc lexbuf;
|
||||
MAXIMUM
|
||||
| "minimum" ->
|
||||
| MR_MINIMUM ->
|
||||
L.update_acc lexbuf;
|
||||
MINIMUM
|
||||
| "filtr" ->
|
||||
| MR_FILTER ->
|
||||
L.update_acc lexbuf;
|
||||
FILTER
|
||||
| "mapuj" ->
|
||||
| MR_MAP ->
|
||||
L.update_acc lexbuf;
|
||||
MAP
|
||||
| "poczatkowy" ->
|
||||
| MR_INIT ->
|
||||
L.update_acc lexbuf;
|
||||
INIT
|
||||
| "liczba" ->
|
||||
| MR_CARDINAL ->
|
||||
L.update_acc lexbuf;
|
||||
CARDINAL
|
||||
| "prawda" ->
|
||||
| MR_TRUE ->
|
||||
L.update_acc lexbuf;
|
||||
TRUE
|
||||
| "falsz" ->
|
||||
| MR_FALSE ->
|
||||
L.update_acc lexbuf;
|
||||
FALSE
|
||||
| "rok" ->
|
||||
| MR_YEAR ->
|
||||
L.update_acc lexbuf;
|
||||
YEAR
|
||||
| "miesiac" ->
|
||||
| MR_MONTH ->
|
||||
L.update_acc lexbuf;
|
||||
MONTH
|
||||
| "dzien" ->
|
||||
| MR_DAY ->
|
||||
L.update_acc lexbuf;
|
||||
DAY
|
||||
| digit, Star (digit | ','), Opt ('.', Rep (digit, 0 .. 2)), Star hspace, "PLN" ->
|
||||
let extract_parts = R.regexp "([0-9]([0-9,]*[0-9]|))(.([0-9]{0,2})|)" in
|
||||
let str = Utf8.lexeme lexbuf in
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts str) in
|
||||
(* Integer literal*)
|
||||
let units = parts 1 in
|
||||
let remove_commas = R.regexp "," in
|
||||
let units =
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_commas ~subst:(fun _ -> "") units)
|
||||
in
|
||||
let cents =
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0
|
||||
in
|
||||
L.update_acc lexbuf;
|
||||
MONEY_AMOUNT (units, cents)
|
||||
| Plus digit, '.', Star digit ->
|
||||
let extract_code_title = R.regexp "([0-9]+)\\.([0-9]*)" in
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in
|
||||
(* Integer literal*)
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL_LITERAL
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
||||
| MX_MONEY_AMOUNT
|
||||
| MX_DECIMAL_LITERAL
|
||||
| "<=@" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DATE
|
||||
@ -373,28 +562,28 @@ let rec lex_code (lexbuf : lexbuf) : token =
|
||||
| "/^" ->
|
||||
L.update_acc lexbuf;
|
||||
DIVDURATION
|
||||
| "<=", 0x24 ->
|
||||
| "<=", MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_MONEY
|
||||
| '<', 0x24 ->
|
||||
| '<', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_MONEY
|
||||
| ">=", 0x24 ->
|
||||
| ">=", MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_MONEY
|
||||
| '>', 0x24 ->
|
||||
| '>', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_MONEY
|
||||
| '+', 0x24 ->
|
||||
| '+', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSMONEY
|
||||
| '-', 0x24 ->
|
||||
| '-', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSMONEY
|
||||
| '*', 0x24 ->
|
||||
| '*', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
MULTMONEY
|
||||
| '/', 0x24 ->
|
||||
| '/', MR_MONEY_OP_SUFFIX ->
|
||||
L.update_acc lexbuf;
|
||||
DIVMONEY
|
||||
| "<=." ->
|
||||
@ -486,7 +675,7 @@ let rec lex_code (lexbuf : lexbuf) : token =
|
||||
ALT
|
||||
| "++" ->
|
||||
L.update_acc lexbuf;
|
||||
CONCAT
|
||||
PLUSPLUS
|
||||
| '.' ->
|
||||
L.update_acc lexbuf;
|
||||
DOT
|
||||
@ -524,9 +713,9 @@ let rec lex_directive (lexbuf : lexbuf) : token =
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| Plus hspace -> lex_directive lexbuf
|
||||
| "Poczatek", Plus hspace, "metadanych" -> BEGIN_METADATA
|
||||
| "Koniec", Plus hspace, "metadanych" -> END_METADATA
|
||||
| "Include" -> LAW_INCLUDE
|
||||
| MR_BEGIN_METADATA -> BEGIN_METADATA
|
||||
| MR_END_METADATA -> END_METADATA
|
||||
| MR_LAW_INCLUDE -> LAW_INCLUDE
|
||||
| ":" ->
|
||||
L.context := Directive_args;
|
||||
COLON
|
@ -79,15 +79,15 @@ let token_list_language_agnostic : (string * token) list =
|
||||
(":", COLON);
|
||||
(";", SEMICOLON);
|
||||
("--", ALT);
|
||||
("++", CONCAT);
|
||||
("++", PLUSPLUS);
|
||||
]
|
||||
|
||||
module type LocalisedLexer = sig
|
||||
val token_list : (string * Tokens.token) list
|
||||
(** Same as {!val: token_list_language_agnostic}, but with tokens specialized to a given language. *)
|
||||
|
||||
val builtins : (string * Ast.builtin_expression) list
|
||||
(** Associative list of string to their corresponding builtins *)
|
||||
val lex_builtin : string -> Ast.builtin_expression option
|
||||
(** Simple lexer for builtins *)
|
||||
|
||||
val lex_code : Sedlexing.lexbuf -> Tokens.token
|
||||
(** Main lexing function used in code blocks *)
|
||||
|
@ -46,8 +46,8 @@ module type LocalisedLexer = sig
|
||||
(** Same as {!val: token_list_language_agnostic}, but with tokens whose string varies with the
|
||||
input language. *)
|
||||
|
||||
val builtins : (string * Ast.builtin_expression) list
|
||||
(** Associative list of string to their corresponding builtins *)
|
||||
val lex_builtin : string -> Ast.builtin_expression option
|
||||
(** Simple lexer for builtins *)
|
||||
|
||||
val lex_code : Sedlexing.lexbuf -> Tokens.token
|
||||
(** Main lexing function used in a code block *)
|
||||
|
135
compiler/surface/lexer_en.cppo.ml
Normal file
135
compiler/surface/lexer_en.cppo.ml
Normal file
@ -0,0 +1,135 @@
|
||||
(* -*- coding: iso-latin-1 -*- *)
|
||||
|
||||
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
||||
computation rules. Copyright (C) 2020 Inria, contributors: Denis Merigoux
|
||||
<denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the License for the specific language governing permissions and limitations under
|
||||
the License. *)
|
||||
|
||||
(* Defining the lexer macros for English *)
|
||||
|
||||
(* Tokens and their corresponding sedlex regexps *)
|
||||
|
||||
#define MS_SCOPE "scope"
|
||||
#define MS_CONSEQUENCE "consequence"
|
||||
#define MS_DATA "data"
|
||||
#define MS_DEPENDS "depends on"
|
||||
#define MR_DEPENDS "depends", space_plus, "on"
|
||||
#define MS_DECLARATION "declaration"
|
||||
#define MS_CONTEXT "context"
|
||||
#define MS_DECREASING "decreasing"
|
||||
#define MS_INCREASING "increasing"
|
||||
#define MS_OF "of"
|
||||
#define MS_COLLECTION "collection"
|
||||
#define MS_ENUM "enumeration"
|
||||
#define MS_INTEGER "integer"
|
||||
#define MS_MONEY "money"
|
||||
#define MS_TEXT "text"
|
||||
#define MS_DECIMAL "decimal"
|
||||
#define MS_DATE "date"
|
||||
#define MS_DURATION "duration"
|
||||
#define MS_BOOLEAN "boolean"
|
||||
#define MS_SUM "sum"
|
||||
#define MS_FILLED "fulfilled"
|
||||
#define MS_DEFINITION "definition"
|
||||
#define MS_LABEL "label"
|
||||
#define MS_EXCEPTION "exception"
|
||||
#define MS_DEFINED_AS "equals"
|
||||
#define MS_MATCH "match"
|
||||
#define MS_WILDCARD "anything"
|
||||
#define MS_WITH "with pattern"
|
||||
#define MR_WITH "with", space_plus, "pattern"
|
||||
#define MS_UNDER_CONDITION "under condition"
|
||||
#define MR_UNDER_CONDITION "under", space_plus, "condition"
|
||||
#define MS_IF "if"
|
||||
#define MS_THEN "then"
|
||||
#define MS_ELSE "else"
|
||||
#define MS_CONDITION "condition"
|
||||
#define MS_CONTENT "content"
|
||||
#define MS_STRUCT "structure"
|
||||
#define MS_ASSERTION "assertion"
|
||||
#define MS_VARIES "varies"
|
||||
#define MS_WITH_V "with"
|
||||
#define MS_FOR "for"
|
||||
#define MS_ALL "all"
|
||||
#define MS_WE_HAVE "we have"
|
||||
#define MR_WE_HAVE "we", space_plus, "have"
|
||||
#define MS_FIXED "fixed"
|
||||
#define MS_BY "by"
|
||||
#define MS_RULE "rule"
|
||||
#define MS_EXISTS "exists"
|
||||
#define MS_IN "in"
|
||||
#define MS_SUCH "such"
|
||||
#define MS_THAT "that"
|
||||
#define MS_AND "and"
|
||||
#define MS_OR "or"
|
||||
#define MS_XOR "xor"
|
||||
#define MS_NOT "not"
|
||||
#define MS_MAXIMUM "maximum"
|
||||
#define MS_MINIMUM "minimum"
|
||||
#define MS_FILTER "filter"
|
||||
#define MS_MAP "map"
|
||||
#define MS_INIT "initial"
|
||||
#define MS_CARDINAL "number"
|
||||
#define MS_YEAR "year"
|
||||
#define MS_MONTH "month"
|
||||
#define MS_DAY "day"
|
||||
#define MS_TRUE "true"
|
||||
#define MS_FALSE "false"
|
||||
|
||||
#define MR_MONEY_OP_SUFFIX '$'
|
||||
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_IntToDec "integer_to_decimal"
|
||||
#define MS_GetDay "get_day"
|
||||
#define MS_GetMonth "get_month"
|
||||
#define MS_GetYear "get_year"
|
||||
|
||||
(* Directives *)
|
||||
|
||||
#define MR_BEGIN_METADATA "Begin", Plus hspace, "metadata"
|
||||
#define MR_END_METADATA "End", Plus hspace, "metadata"
|
||||
#define MR_LAW_INCLUDE "Include"
|
||||
#define MX_AT_PAGE \
|
||||
'@', Star hspace, "p.", Star hspace, Plus digit -> \
|
||||
let s = Utf8.lexeme lexbuf in \
|
||||
let i = String.index s '.' in \
|
||||
AT_PAGE (int_of_string (String.trim (String.sub s i (String.length s - i))))
|
||||
|
||||
(* More complex cases *)
|
||||
|
||||
#define MX_MONEY_AMOUNT \
|
||||
0x24, Star hspace, digit, Star (digit | ','), Opt ('.', Rep (digit, 0 .. 2)) -> \
|
||||
let extract_parts = R.regexp "([0-9]([0-9,]*[0-9]|))(.([0-9]{0,2})|)" in \
|
||||
let full_str = Utf8.lexeme lexbuf in \
|
||||
let only_numbers_str = String.trim (String.sub full_str 1 (String.length full_str - 1)) in \
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts only_numbers_str) in \
|
||||
(* Integer literal*) \
|
||||
let units = parts 1 in \
|
||||
let remove_commas = R.regexp "," in \
|
||||
let units = \
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_commas ~subst:(fun _ -> "") units) \
|
||||
in \
|
||||
let cents = \
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0 \
|
||||
in \
|
||||
L.update_acc lexbuf; \
|
||||
MONEY_AMOUNT (units, cents)
|
||||
|
||||
#define MX_DECIMAL_LITERAL \
|
||||
Plus digit, '.', Star digit -> \
|
||||
let extract_code_title = R.regexp "([0-9]+)\\.([0-9]*)" in \
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in \
|
||||
(* Integer literal*) \
|
||||
L.update_acc lexbuf; \
|
||||
DECIMAL_LITERAL \
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
@ -1,575 +0,0 @@
|
||||
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
||||
computation rules. Copyright (C) 2020 Inria, contributors: Denis Merigoux
|
||||
<denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the License for the specific language governing permissions and limitations under
|
||||
the License. *)
|
||||
|
||||
open Tokens
|
||||
open Sedlexing
|
||||
open Utils
|
||||
module L = Lexer_common
|
||||
module R = Re.Pcre
|
||||
|
||||
(** Same as {!val: Surface.Lexer_common.token_list_language_agnostic}, but with tokens specialized
|
||||
to English. *)
|
||||
let token_list : (string * token) list =
|
||||
[
|
||||
("scope", SCOPE);
|
||||
("consequence", CONSEQUENCE);
|
||||
("data", DATA);
|
||||
("depends on", DEPENDS);
|
||||
("declaration", DECLARATION);
|
||||
("context", CONTEXT);
|
||||
("decreasing", DECREASING);
|
||||
("increasing", INCREASING);
|
||||
("of", OF);
|
||||
("collection", COLLECTION);
|
||||
("enumeration", ENUM);
|
||||
("integer", INTEGER);
|
||||
("money", MONEY);
|
||||
("text", TEXT);
|
||||
("decimal", DECIMAL);
|
||||
("date", DATE);
|
||||
("duration", DURATION);
|
||||
("boolean", BOOLEAN);
|
||||
("sum", SUM);
|
||||
("fulfilled", FILLED);
|
||||
("definition", DEFINITION);
|
||||
("label", LABEL);
|
||||
("exception", EXCEPTION);
|
||||
("equals", DEFINED_AS);
|
||||
("match", MATCH);
|
||||
("anything", WILDCARD);
|
||||
("with pattern", WITH);
|
||||
("under condition", UNDER_CONDITION);
|
||||
("if", IF);
|
||||
("then", THEN);
|
||||
("else", ELSE);
|
||||
("content", CONTENT);
|
||||
("structure", STRUCT);
|
||||
("assertion", ASSERTION);
|
||||
("varies", VARIES);
|
||||
("with", WITH_V);
|
||||
("for", FOR);
|
||||
("all", ALL);
|
||||
("we have", WE_HAVE);
|
||||
("fixed", FIXED);
|
||||
("by", BY);
|
||||
("rule", RULE);
|
||||
("exists", EXISTS);
|
||||
("such", SUCH);
|
||||
("that", THAT);
|
||||
("and", AND);
|
||||
("or", OR);
|
||||
("xor", XOR);
|
||||
("not", NOT);
|
||||
("maximum", MAXIMUM);
|
||||
("minimum", MINIMUM);
|
||||
("filter", FILTER);
|
||||
("map", MAP);
|
||||
("initial", INIT);
|
||||
("number", CARDINAL);
|
||||
("year", YEAR);
|
||||
("month", MONTH);
|
||||
("day", DAY);
|
||||
("true", TRUE);
|
||||
("false", FALSE);
|
||||
]
|
||||
@ L.token_list_language_agnostic
|
||||
|
||||
(** Localised builtin functions *)
|
||||
let builtins : (string * Ast.builtin_expression) list =
|
||||
[
|
||||
("integer_to_decimal", IntToDec);
|
||||
("get_day", GetDay);
|
||||
("get_month", GetMonth);
|
||||
("get_year", GetYear);
|
||||
]
|
||||
|
||||
(** Regexp matching any digit character.
|
||||
|
||||
@note can not be used outside the current module (@see <
|
||||
https://github.com/ocaml-community/sedlex#lexer-specifications >). *)
|
||||
let digit = [%sedlex.regexp? '0' .. '9']
|
||||
|
||||
(** Regexp matching at least one space. *)
|
||||
let space_plus = [%sedlex.regexp? Plus white_space]
|
||||
|
||||
(** Regexp matching white space but not newlines *)
|
||||
let hspace = [%sedlex.regexp? Sub (white_space, Chars "\n\r")]
|
||||
|
||||
(** Main lexing function used in code blocks *)
|
||||
let rec lex_code (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| white_space ->
|
||||
(* Whitespaces *)
|
||||
L.update_acc lexbuf;
|
||||
lex_code lexbuf
|
||||
| '#', Star (Compl '\n'), '\n' ->
|
||||
(* Comments *)
|
||||
L.update_acc lexbuf;
|
||||
lex_code lexbuf
|
||||
| "```" ->
|
||||
(* End of code section *)
|
||||
L.context := Law;
|
||||
END_CODE (Buffer.contents L.code_buffer)
|
||||
| "scope" ->
|
||||
L.update_acc lexbuf;
|
||||
SCOPE
|
||||
| "data" ->
|
||||
L.update_acc lexbuf;
|
||||
DATA
|
||||
| "depends", space_plus, "on" ->
|
||||
L.update_acc lexbuf;
|
||||
DEPENDS
|
||||
| "declaration" ->
|
||||
L.update_acc lexbuf;
|
||||
DECLARATION
|
||||
| "context" ->
|
||||
L.update_acc lexbuf;
|
||||
CONTEXT
|
||||
| "decreasing" ->
|
||||
L.update_acc lexbuf;
|
||||
DECREASING
|
||||
| "increasing" ->
|
||||
L.update_acc lexbuf;
|
||||
INCREASING
|
||||
| "of" ->
|
||||
L.update_acc lexbuf;
|
||||
OF
|
||||
| "collection" ->
|
||||
L.update_acc lexbuf;
|
||||
COLLECTION
|
||||
| "enumeration" ->
|
||||
L.update_acc lexbuf;
|
||||
ENUM
|
||||
| "integer" ->
|
||||
L.update_acc lexbuf;
|
||||
INTEGER
|
||||
| "money" ->
|
||||
L.update_acc lexbuf;
|
||||
MONEY
|
||||
| "text" ->
|
||||
L.update_acc lexbuf;
|
||||
TEXT
|
||||
| "decimal" ->
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL
|
||||
| "date" ->
|
||||
L.update_acc lexbuf;
|
||||
DATE
|
||||
| "duration" ->
|
||||
L.update_acc lexbuf;
|
||||
DURATION
|
||||
| "boolean" ->
|
||||
L.update_acc lexbuf;
|
||||
BOOLEAN
|
||||
| "sum" ->
|
||||
L.update_acc lexbuf;
|
||||
SUM
|
||||
| "fulfilled" ->
|
||||
L.update_acc lexbuf;
|
||||
FILLED
|
||||
| "definition" ->
|
||||
L.update_acc lexbuf;
|
||||
DEFINITION
|
||||
| "label" ->
|
||||
L.update_acc lexbuf;
|
||||
LABEL
|
||||
| "exception" ->
|
||||
L.update_acc lexbuf;
|
||||
EXCEPTION
|
||||
| "equals" ->
|
||||
L.update_acc lexbuf;
|
||||
DEFINED_AS
|
||||
| "match" ->
|
||||
L.update_acc lexbuf;
|
||||
MATCH
|
||||
| "with", space_plus, "pattern" ->
|
||||
L.update_acc lexbuf;
|
||||
WITH
|
||||
| "anything" ->
|
||||
L.update_acc lexbuf;
|
||||
WILDCARD
|
||||
| "under", space_plus, "condition" ->
|
||||
L.update_acc lexbuf;
|
||||
UNDER_CONDITION
|
||||
| "if" ->
|
||||
L.update_acc lexbuf;
|
||||
IF
|
||||
| "consequence" ->
|
||||
L.update_acc lexbuf;
|
||||
CONSEQUENCE
|
||||
| "then" ->
|
||||
L.update_acc lexbuf;
|
||||
THEN
|
||||
| "else" ->
|
||||
L.update_acc lexbuf;
|
||||
ELSE
|
||||
| "condition" ->
|
||||
L.update_acc lexbuf;
|
||||
CONDITION
|
||||
| "content" ->
|
||||
L.update_acc lexbuf;
|
||||
CONTENT
|
||||
| "structure" ->
|
||||
L.update_acc lexbuf;
|
||||
STRUCT
|
||||
| "assertion" ->
|
||||
L.update_acc lexbuf;
|
||||
ASSERTION
|
||||
| "varies" ->
|
||||
L.update_acc lexbuf;
|
||||
VARIES
|
||||
| "with" ->
|
||||
L.update_acc lexbuf;
|
||||
WITH_V
|
||||
| "for" ->
|
||||
L.update_acc lexbuf;
|
||||
FOR
|
||||
| "all" ->
|
||||
L.update_acc lexbuf;
|
||||
ALL
|
||||
| "we", space_plus, "have" ->
|
||||
L.update_acc lexbuf;
|
||||
WE_HAVE
|
||||
| "fixed" ->
|
||||
L.update_acc lexbuf;
|
||||
FIXED
|
||||
| "by" ->
|
||||
L.update_acc lexbuf;
|
||||
BY
|
||||
| "rule" ->
|
||||
(* 0xE8 is è *)
|
||||
L.update_acc lexbuf;
|
||||
RULE
|
||||
| "exists" ->
|
||||
L.update_acc lexbuf;
|
||||
EXISTS
|
||||
| "in" ->
|
||||
L.update_acc lexbuf;
|
||||
IN
|
||||
| "such" ->
|
||||
L.update_acc lexbuf;
|
||||
SUCH
|
||||
| "that" ->
|
||||
L.update_acc lexbuf;
|
||||
THAT
|
||||
| "and" ->
|
||||
L.update_acc lexbuf;
|
||||
AND
|
||||
| "or" ->
|
||||
L.update_acc lexbuf;
|
||||
OR
|
||||
| "xor" ->
|
||||
L.update_acc lexbuf;
|
||||
XOR
|
||||
| "not" ->
|
||||
L.update_acc lexbuf;
|
||||
NOT
|
||||
| "maximum" ->
|
||||
L.update_acc lexbuf;
|
||||
MAXIMUM
|
||||
| "minimum" ->
|
||||
L.update_acc lexbuf;
|
||||
MINIMUM
|
||||
| "filter" ->
|
||||
L.update_acc lexbuf;
|
||||
FILTER
|
||||
| "map" ->
|
||||
L.update_acc lexbuf;
|
||||
MAP
|
||||
| "initial" ->
|
||||
L.update_acc lexbuf;
|
||||
INIT
|
||||
| "number" ->
|
||||
L.update_acc lexbuf;
|
||||
CARDINAL
|
||||
| "true" ->
|
||||
L.update_acc lexbuf;
|
||||
TRUE
|
||||
| "false" ->
|
||||
L.update_acc lexbuf;
|
||||
FALSE
|
||||
| "year" ->
|
||||
L.update_acc lexbuf;
|
||||
YEAR
|
||||
| "month" ->
|
||||
L.update_acc lexbuf;
|
||||
MONTH
|
||||
| "day" ->
|
||||
L.update_acc lexbuf;
|
||||
DAY
|
||||
| 0x24, Star hspace, digit, Star (digit | ','), Opt ('.', Rep (digit, 0 .. 2)) ->
|
||||
let extract_parts = R.regexp "([0-9]([0-9,]*[0-9]|))(.([0-9]{0,2})|)" in
|
||||
let full_str = Utf8.lexeme lexbuf in
|
||||
let only_numbers_str = String.trim (String.sub full_str 1 (String.length full_str - 1)) in
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts only_numbers_str) in
|
||||
(* Integer literal*)
|
||||
let units = parts 1 in
|
||||
let remove_commas = R.regexp "," in
|
||||
let units =
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_commas ~subst:(fun _ -> "") units)
|
||||
in
|
||||
let cents =
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0
|
||||
in
|
||||
L.update_acc lexbuf;
|
||||
MONEY_AMOUNT (units, cents)
|
||||
| Plus digit, '.', Star digit ->
|
||||
let extract_code_title = R.regexp "([0-9]+)\\.([0-9]*)" in
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in
|
||||
(* Integer literal*)
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL_LITERAL
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
||||
| "<=@" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DATE
|
||||
| "<@" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DATE
|
||||
| ">=@" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DATE
|
||||
| ">@" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DATE
|
||||
| "-@" ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDATE
|
||||
| "+@" ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDATE
|
||||
| "<=^" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DURATION
|
||||
| "<^" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DURATION
|
||||
| ">=^" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DURATION
|
||||
| ">^" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DURATION
|
||||
| "+^" ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDURATION
|
||||
| "-^" ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDURATION
|
||||
| "/^" ->
|
||||
L.update_acc lexbuf;
|
||||
DIVDURATION
|
||||
| "<=", 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_MONEY
|
||||
| '<', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_MONEY
|
||||
| ">=", 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_MONEY
|
||||
| '>', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_MONEY
|
||||
| '+', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSMONEY
|
||||
| '-', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSMONEY
|
||||
| '*', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
MULTMONEY
|
||||
| '/', 0x24 ->
|
||||
L.update_acc lexbuf;
|
||||
DIVMONEY
|
||||
| "<=." ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DEC
|
||||
| "<." ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DEC
|
||||
| ">=." ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DEC
|
||||
| ">." ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DEC
|
||||
| "+." ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDEC
|
||||
| "-." ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDEC
|
||||
| "*." ->
|
||||
L.update_acc lexbuf;
|
||||
MULTDEC
|
||||
| "/." ->
|
||||
L.update_acc lexbuf;
|
||||
DIVDEC
|
||||
| "<=" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL
|
||||
| '<' ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER
|
||||
| ">=" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL
|
||||
| '>' ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER
|
||||
| '+' ->
|
||||
L.update_acc lexbuf;
|
||||
PLUS
|
||||
| '-' ->
|
||||
L.update_acc lexbuf;
|
||||
MINUS
|
||||
| '*' ->
|
||||
L.update_acc lexbuf;
|
||||
MULT
|
||||
| '/' ->
|
||||
L.update_acc lexbuf;
|
||||
DIV
|
||||
| "!=" ->
|
||||
L.update_acc lexbuf;
|
||||
NOT_EQUAL
|
||||
| '=' ->
|
||||
L.update_acc lexbuf;
|
||||
EQUAL
|
||||
| '%' ->
|
||||
L.update_acc lexbuf;
|
||||
PERCENT
|
||||
| '(' ->
|
||||
L.update_acc lexbuf;
|
||||
LPAREN
|
||||
| ')' ->
|
||||
L.update_acc lexbuf;
|
||||
RPAREN
|
||||
| '{' ->
|
||||
L.update_acc lexbuf;
|
||||
LBRACKET
|
||||
| '}' ->
|
||||
L.update_acc lexbuf;
|
||||
RBRACKET
|
||||
| '[' ->
|
||||
L.update_acc lexbuf;
|
||||
LSQUARE
|
||||
| ']' ->
|
||||
L.update_acc lexbuf;
|
||||
RSQUARE
|
||||
| '|' ->
|
||||
L.update_acc lexbuf;
|
||||
VERTICAL
|
||||
| ':' ->
|
||||
L.update_acc lexbuf;
|
||||
COLON
|
||||
| ';' ->
|
||||
L.update_acc lexbuf;
|
||||
SEMICOLON
|
||||
| "--" ->
|
||||
L.update_acc lexbuf;
|
||||
ALT
|
||||
| "++" ->
|
||||
L.update_acc lexbuf;
|
||||
CONCAT
|
||||
| '.' ->
|
||||
L.update_acc lexbuf;
|
||||
DOT
|
||||
| uppercase, Star (uppercase | lowercase | digit | '_' | '\'') ->
|
||||
(* Name of constructor *)
|
||||
L.update_acc lexbuf;
|
||||
CONSTRUCTOR (Utf8.lexeme lexbuf)
|
||||
| lowercase, Star (lowercase | uppercase | digit | '_' | '\'') ->
|
||||
(* Name of variable *)
|
||||
L.update_acc lexbuf;
|
||||
IDENT (Utf8.lexeme lexbuf)
|
||||
| Plus digit ->
|
||||
(* Integer literal*)
|
||||
L.update_acc lexbuf;
|
||||
INT_LITERAL (Runtime.integer_of_string (Utf8.lexeme lexbuf))
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
let rec lex_directive_args (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| '@', Star hspace, "p.", Star hspace, Plus digit ->
|
||||
let s = Utf8.lexeme lexbuf in
|
||||
let i = String.index s '.' in
|
||||
AT_PAGE (int_of_string (String.trim (String.sub s i (String.length s - i))))
|
||||
| Plus (Compl white_space) -> DIRECTIVE_ARG (Utf8.lexeme lexbuf)
|
||||
| Plus hspace -> lex_directive_args lexbuf
|
||||
| '\n' | eof ->
|
||||
L.context := Law;
|
||||
END_DIRECTIVE
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
let rec lex_directive (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| Plus hspace -> lex_directive lexbuf
|
||||
| "Begin", Plus hspace, "metadata" -> BEGIN_METADATA
|
||||
| "End", Plus hspace, "metadata" -> END_METADATA
|
||||
| "Include" -> LAW_INCLUDE
|
||||
| ":" ->
|
||||
L.context := Directive_args;
|
||||
COLON
|
||||
| '\n' | eof ->
|
||||
L.context := Law;
|
||||
END_DIRECTIVE
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
(** Main lexing function used outside code blocks *)
|
||||
let lex_law (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let ((_, start_pos) as prev_pos) = lexing_positions lexbuf in
|
||||
let at_bol = Lexing.(start_pos.pos_bol = start_pos.pos_cnum) in
|
||||
if at_bol then
|
||||
match%sedlex lexbuf with
|
||||
| eof -> EOF
|
||||
| "```catala", Plus white_space ->
|
||||
L.context := Code;
|
||||
Buffer.clear L.code_buffer;
|
||||
BEGIN_CODE
|
||||
| '>' ->
|
||||
L.context := Directive;
|
||||
BEGIN_DIRECTIVE
|
||||
| Plus '#', Star hspace, Plus (Compl '\n'), Star hspace, ('\n' | eof) ->
|
||||
L.get_law_heading lexbuf
|
||||
| _ -> (
|
||||
(* Nested match for lower priority; `_` matches length 0 so we effectively retry the
|
||||
sub-match at the same point *)
|
||||
let lexbuf = lexbuf in
|
||||
(* workaround sedlex bug, see https://github.com/ocaml-community/sedlex/issues/12 *)
|
||||
match%sedlex lexbuf with
|
||||
| Star (Compl '\n'), ('\n' | eof) -> LAW_TEXT (Utf8.lexeme lexbuf)
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme)
|
||||
else
|
||||
match%sedlex lexbuf with
|
||||
| eof -> EOF
|
||||
| Star (Compl '\n'), ('\n' | eof) -> LAW_TEXT (Utf8.lexeme lexbuf)
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
(** Entry point of the lexer, distributes to {!val: lex_code} or {!val: lex_law} depending of {!val:
|
||||
Surface.Lexer_common.is_code}. *)
|
||||
let lexer (lexbuf : lexbuf) : token =
|
||||
match !L.context with
|
||||
| Law -> lex_law lexbuf
|
||||
| Code -> lex_code lexbuf
|
||||
| Directive -> lex_directive lexbuf
|
||||
| Directive_args -> lex_directive_args lexbuf
|
141
compiler/surface/lexer_fr.cppo.ml
Normal file
141
compiler/surface/lexer_fr.cppo.ml
Normal file
@ -0,0 +1,141 @@
|
||||
(* -*- coding: iso-latin-1 -*- *)
|
||||
|
||||
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
||||
computation rules. Copyright (C) 2020 Inria, contributors: Denis Merigoux
|
||||
<denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the License for the specific language governing permissions and limitations under
|
||||
the License. *)
|
||||
|
||||
(* WARNING: this file must be saved as Latin-1 and not utf8, sedlex requires it *)
|
||||
|
||||
(* Defining the lexer macros for French *)
|
||||
|
||||
|
||||
(* Tokens and their corresponding sedlex regexps *)
|
||||
|
||||
#define MS_SCOPE "champ d'application"
|
||||
#define MR_SCOPE "champ", space_plus, "d'application"
|
||||
#define MS_CONSEQUENCE "conséquence"
|
||||
#define MS_DATA "donnée"
|
||||
#define MS_DEPENDS "dépend de"
|
||||
#define MR_DEPENDS "dépend", space_plus, "de"
|
||||
#define MS_DECLARATION "déclaration"
|
||||
#define MS_CONTEXT "contexte"
|
||||
#define MS_DECREASING "décroissant"
|
||||
#define MS_INCREASING "croissant"
|
||||
#define MS_OF "de"
|
||||
#define MS_COLLECTION "collection"
|
||||
#define MS_ENUM "énumération"
|
||||
#define MS_INTEGER "entier"
|
||||
#define MS_MONEY "argent"
|
||||
#define MS_TEXT "texte"
|
||||
#define MS_DECIMAL "décimal"
|
||||
#define MS_DATE "date"
|
||||
#define MS_DURATION "durée"
|
||||
#define MS_BOOLEAN "booléen"
|
||||
#define MS_SUM "somme"
|
||||
#define MS_FILLED "rempli"
|
||||
#define MS_DEFINITION "définition"
|
||||
#define MS_LABEL "étiquette"
|
||||
#define MS_EXCEPTION "exception"
|
||||
#define MS_DEFINED_AS "égal à"
|
||||
#define MR_DEFINED_AS "égal", space_plus, "à"
|
||||
#define MS_MATCH "selon"
|
||||
#define MS_WILDCARD "n'importe quel"
|
||||
#define MR_WILDCARD "n'importe", space_plus, "quel"
|
||||
#define MS_WITH "sous forme"
|
||||
#define MR_WITH "sous", space_plus, "forme"
|
||||
#define MS_UNDER_CONDITION "sous condition"
|
||||
#define MR_UNDER_CONDITION "sous", space_plus, "condition"
|
||||
#define MS_IF "si"
|
||||
#define MS_THEN "alors"
|
||||
#define MS_ELSE "sinon"
|
||||
#define MS_CONDITION "condition"
|
||||
#define MS_CONTENT "contenu"
|
||||
#define MS_STRUCT "structure"
|
||||
#define MS_ASSERTION "assertion"
|
||||
#define MS_VARIES "varie"
|
||||
#define MS_WITH_V "avec"
|
||||
#define MS_FOR "pour"
|
||||
#define MS_ALL "tout"
|
||||
#define MS_WE_HAVE "on a"
|
||||
#define MR_WE_HAVE "on", space_plus, "a"
|
||||
#define MS_FIXED "fixé"
|
||||
#define MS_BY "par"
|
||||
#define MS_RULE "règle"
|
||||
#define MS_EXISTS "existe"
|
||||
#define MS_IN "dans"
|
||||
#define MS_SUCH "tel"
|
||||
#define MS_THAT "que"
|
||||
#define MS_AND "et"
|
||||
#define MS_OR "ou"
|
||||
#define MS_XOR "ou bien"
|
||||
#define MR_XOR "ou", space_plus, "bien"
|
||||
#define MS_NOT "non"
|
||||
#define MS_MAXIMUM "maximum"
|
||||
#define MS_MINIMUM "minimum"
|
||||
#define MS_FILTER "filtre"
|
||||
#define MS_MAP "application"
|
||||
#define MS_INIT "initial"
|
||||
#define MS_CARDINAL "nombre"
|
||||
#define MS_YEAR "an"
|
||||
#define MS_MONTH "mois"
|
||||
#define MS_DAY "jour"
|
||||
#define MS_TRUE "vrai"
|
||||
#define MS_FALSE "faux"
|
||||
|
||||
#define MR_MONEY_OP_SUFFIX 0x20AC (* The euro sign *)
|
||||
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_IntToDec "entier_vers_décimal"
|
||||
#define MS_GetDay "accès_jour"
|
||||
#define MS_GetMonth "accès_mois"
|
||||
#define MS_GetYear "accès_année"
|
||||
|
||||
(* Directives *)
|
||||
|
||||
#define MR_BEGIN_METADATA "Début", Plus hspace, "métadonnées"
|
||||
#define MR_END_METADATA "Fin", Plus hspace, "métadonnées"
|
||||
#define MR_LAW_INCLUDE "Inclusion"
|
||||
#define MX_AT_PAGE \
|
||||
'@', Star hspace, "p.", Star hspace, Plus digit -> \
|
||||
let s = Utf8.lexeme lexbuf in \
|
||||
let i = String.index s '.' in \
|
||||
AT_PAGE (int_of_string (String.trim (String.sub s i (String.length s - i))))
|
||||
|
||||
(* More complex cases *)
|
||||
|
||||
#define MX_MONEY_AMOUNT \
|
||||
digit, Star (digit | hspace), Opt (',', Rep (digit, 0 .. 2)), Star hspace, 0x20AC -> \
|
||||
let extract_parts = R.regexp "([0-9]([0-9 ]*[0-9]|))(,([0-9]{0,2})|)" in \
|
||||
let str = Utf8.lexeme lexbuf in \
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts str) in \
|
||||
(* Integer literal*) \
|
||||
let units = parts 1 in \
|
||||
let remove_spaces = R.regexp " " in \
|
||||
let units = \
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_spaces ~subst:(fun _ -> "") units) \
|
||||
in \
|
||||
let cents = \
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0 \
|
||||
in \
|
||||
L.update_acc lexbuf; \
|
||||
MONEY_AMOUNT (units, cents)
|
||||
|
||||
#define MX_DECIMAL_LITERAL \
|
||||
Plus digit, ',', Star digit -> \
|
||||
let extract_code_title = R.regexp "([0-9]+),([0-9]*)" in \
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in \
|
||||
(* Integer literal*) \
|
||||
L.update_acc lexbuf; \
|
||||
DECIMAL_LITERAL \
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
@ -1,580 +0,0 @@
|
||||
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
||||
computation rules. Copyright (C) 2020 Inria, contributors: Denis Merigoux
|
||||
<denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the License for the specific language governing permissions and limitations under
|
||||
the License. *)
|
||||
|
||||
open Tokens
|
||||
open Sedlexing
|
||||
open Utils
|
||||
module L = Lexer_common
|
||||
module R = Re.Pcre
|
||||
|
||||
(** Same as {!val: Surface.Lexer_common.token_list_language_agnostic}, but with tokens specialized
|
||||
to French. *)
|
||||
let token_list : (string * token) list =
|
||||
[
|
||||
("champ d'application", SCOPE);
|
||||
("conséquence", CONSEQUENCE);
|
||||
("donnée", DATA);
|
||||
("dépend de", DEPENDS);
|
||||
("déclaration", DECLARATION);
|
||||
("contexte", CONTEXT);
|
||||
("décroissant", DECREASING);
|
||||
("croissant", INCREASING);
|
||||
("de", OF);
|
||||
("collection", COLLECTION);
|
||||
("énumération", ENUM);
|
||||
("entier", INTEGER);
|
||||
("argent", MONEY);
|
||||
("texte", TEXT);
|
||||
("decimal", DECIMAL);
|
||||
("date", DATE);
|
||||
("durée", DURATION);
|
||||
("booléen", BOOLEAN);
|
||||
("somme", SUM);
|
||||
("rempli", FILLED);
|
||||
("définition", DEFINITION);
|
||||
("étiquette", LABEL);
|
||||
("exception", EXCEPTION);
|
||||
("égal à", DEFINED_AS);
|
||||
("selon", MATCH);
|
||||
("sous forme", WITH);
|
||||
("n'importe quel", WILDCARD);
|
||||
("sous condition", UNDER_CONDITION);
|
||||
("si", IF);
|
||||
("alors", THEN);
|
||||
("sinon", ELSE);
|
||||
("contenu", CONTENT);
|
||||
("structure", STRUCT);
|
||||
("assertion", ASSERTION);
|
||||
("varie", VARIES);
|
||||
("avec", WITH_V);
|
||||
("pour", FOR);
|
||||
("tout", ALL);
|
||||
("on a", WE_HAVE);
|
||||
("fixé", FIXED);
|
||||
("par", BY);
|
||||
("règle", RULE);
|
||||
("existe", EXISTS);
|
||||
("tel", SUCH);
|
||||
("que", THAT);
|
||||
("et", AND);
|
||||
("ou", OR);
|
||||
("ou bien", XOR);
|
||||
("non", NOT);
|
||||
("maximum", MAXIMUM);
|
||||
("minimum", MINIMUM);
|
||||
("filtre", FILTER);
|
||||
("application", MAP);
|
||||
("initial", INIT);
|
||||
("nombre", CARDINAL);
|
||||
("an", YEAR);
|
||||
("mois", MONTH);
|
||||
("jour", DAY);
|
||||
("vrai", TRUE);
|
||||
("faux", FALSE);
|
||||
]
|
||||
@ L.token_list_language_agnostic
|
||||
|
||||
(** Localised builtin functions *)
|
||||
let builtins : (string * Ast.builtin_expression) list =
|
||||
[
|
||||
("entier_vers_décimal", Ast.IntToDec);
|
||||
("accès_jour", Ast.GetDay);
|
||||
("accès_mois", Ast.GetMonth);
|
||||
("accès_année", Ast.GetYear);
|
||||
]
|
||||
|
||||
(** Regexp matching any digit character.
|
||||
|
||||
@note can not be used outside the current module (@see <
|
||||
https://github.com/ocaml-community/sedlex#lexer-specifications >). *)
|
||||
let digit = [%sedlex.regexp? '0' .. '9']
|
||||
|
||||
(** Regexp matching at least one space. *)
|
||||
let space_plus = [%sedlex.regexp? Plus white_space]
|
||||
|
||||
(** Regexp matching white space but not newlines *)
|
||||
let hspace = [%sedlex.regexp? Sub (white_space, Chars "\n\r")]
|
||||
|
||||
(** Main lexing function used in code blocks *)
|
||||
let rec lex_code (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| white_space ->
|
||||
(* Whitespaces *)
|
||||
L.update_acc lexbuf;
|
||||
lex_code lexbuf
|
||||
| '#', Star (Compl '\n'), '\n' ->
|
||||
(* Comments *)
|
||||
L.update_acc lexbuf;
|
||||
lex_code lexbuf
|
||||
| "```" ->
|
||||
(* End of code section *)
|
||||
L.context := Law;
|
||||
END_CODE (Buffer.contents L.code_buffer)
|
||||
| "champ", space_plus, "d\'application" ->
|
||||
L.update_acc lexbuf;
|
||||
SCOPE
|
||||
| "donn", 0xE9, "e" ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
DATA
|
||||
| "d", 0xE9, "pend", space_plus, "de" ->
|
||||
L.update_acc lexbuf;
|
||||
DEPENDS
|
||||
| "d", 0xE9, "claration" ->
|
||||
L.update_acc lexbuf;
|
||||
DECLARATION
|
||||
| "contexte" ->
|
||||
L.update_acc lexbuf;
|
||||
CONTEXT
|
||||
| "d", 0xE9, "croissant" ->
|
||||
L.update_acc lexbuf;
|
||||
DECREASING
|
||||
| "croissant" ->
|
||||
L.update_acc lexbuf;
|
||||
INCREASING
|
||||
| "de" ->
|
||||
L.update_acc lexbuf;
|
||||
OF
|
||||
| "collection" ->
|
||||
L.update_acc lexbuf;
|
||||
COLLECTION
|
||||
| 0xE9, "num", 0xE9, "ration" ->
|
||||
L.update_acc lexbuf;
|
||||
ENUM
|
||||
| "entier" ->
|
||||
L.update_acc lexbuf;
|
||||
INTEGER
|
||||
| "argent" ->
|
||||
L.update_acc lexbuf;
|
||||
MONEY
|
||||
| "texte" ->
|
||||
L.update_acc lexbuf;
|
||||
TEXT
|
||||
| "d", 0xE9, "cimal" ->
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL
|
||||
| "date" ->
|
||||
L.update_acc lexbuf;
|
||||
DATE
|
||||
| "dur", 0xE9, "e" ->
|
||||
L.update_acc lexbuf;
|
||||
DURATION
|
||||
| "bool", 0xE9, "en" ->
|
||||
L.update_acc lexbuf;
|
||||
BOOLEAN
|
||||
| "somme" ->
|
||||
L.update_acc lexbuf;
|
||||
SUM
|
||||
| "rempli" ->
|
||||
L.update_acc lexbuf;
|
||||
FILLED
|
||||
| "d", 0xE9, "finition" ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
DEFINITION
|
||||
| 0xE9, "tiquette" ->
|
||||
L.update_acc lexbuf;
|
||||
LABEL
|
||||
| "exception" ->
|
||||
L.update_acc lexbuf;
|
||||
EXCEPTION
|
||||
| 0xE9, "gal ", 0x00E0 ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
DEFINED_AS
|
||||
| "selon" ->
|
||||
L.update_acc lexbuf;
|
||||
MATCH
|
||||
| "sous", space_plus, "forme" ->
|
||||
L.update_acc lexbuf;
|
||||
WITH
|
||||
| "n'importe", space_plus, "quel" ->
|
||||
L.update_acc lexbuf;
|
||||
WILDCARD
|
||||
| "sous", space_plus, "condition" ->
|
||||
L.update_acc lexbuf;
|
||||
UNDER_CONDITION
|
||||
| "si" ->
|
||||
L.update_acc lexbuf;
|
||||
IF
|
||||
| "cons", 0xE9, "quence" ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
CONSEQUENCE
|
||||
| "alors" ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
THEN
|
||||
| "sinon" ->
|
||||
L.update_acc lexbuf;
|
||||
ELSE
|
||||
| "condition" ->
|
||||
L.update_acc lexbuf;
|
||||
CONDITION
|
||||
| "contenu" ->
|
||||
L.update_acc lexbuf;
|
||||
CONTENT
|
||||
| "structure" ->
|
||||
L.update_acc lexbuf;
|
||||
STRUCT
|
||||
| "assertion" ->
|
||||
L.update_acc lexbuf;
|
||||
ASSERTION
|
||||
| "varie" ->
|
||||
L.update_acc lexbuf;
|
||||
VARIES
|
||||
| "avec" ->
|
||||
L.update_acc lexbuf;
|
||||
WITH_V
|
||||
| "pour" ->
|
||||
L.update_acc lexbuf;
|
||||
FOR
|
||||
| "tout" ->
|
||||
L.update_acc lexbuf;
|
||||
ALL
|
||||
| "on", space_plus, "a" ->
|
||||
L.update_acc lexbuf;
|
||||
WE_HAVE
|
||||
| "fix", 0xE9 ->
|
||||
(* 0xE9 is é *)
|
||||
L.update_acc lexbuf;
|
||||
FIXED
|
||||
| "par" ->
|
||||
L.update_acc lexbuf;
|
||||
BY
|
||||
| "r", 0xE8, "gle" ->
|
||||
(* 0xE8 is è *)
|
||||
L.update_acc lexbuf;
|
||||
RULE
|
||||
| "existe" ->
|
||||
L.update_acc lexbuf;
|
||||
EXISTS
|
||||
| "dans" ->
|
||||
L.update_acc lexbuf;
|
||||
IN
|
||||
| "tel" ->
|
||||
L.update_acc lexbuf;
|
||||
SUCH
|
||||
| "que" ->
|
||||
L.update_acc lexbuf;
|
||||
THAT
|
||||
| "et" ->
|
||||
L.update_acc lexbuf;
|
||||
AND
|
||||
| "ou" ->
|
||||
L.update_acc lexbuf;
|
||||
OR
|
||||
| "ou", space_plus, "bien" ->
|
||||
L.update_acc lexbuf;
|
||||
XOR
|
||||
| "non" ->
|
||||
L.update_acc lexbuf;
|
||||
NOT
|
||||
| "maximum" ->
|
||||
L.update_acc lexbuf;
|
||||
MAXIMUM
|
||||
| "minimum" ->
|
||||
L.update_acc lexbuf;
|
||||
MINIMUM
|
||||
| "filtre" ->
|
||||
L.update_acc lexbuf;
|
||||
FILTER
|
||||
| "application" ->
|
||||
L.update_acc lexbuf;
|
||||
MAP
|
||||
| "initial" ->
|
||||
L.update_acc lexbuf;
|
||||
INIT
|
||||
| "nombre" ->
|
||||
L.update_acc lexbuf;
|
||||
CARDINAL
|
||||
| "vrai" ->
|
||||
L.update_acc lexbuf;
|
||||
TRUE
|
||||
| "faux" ->
|
||||
L.update_acc lexbuf;
|
||||
FALSE
|
||||
| "an" ->
|
||||
L.update_acc lexbuf;
|
||||
YEAR
|
||||
| "mois" ->
|
||||
L.update_acc lexbuf;
|
||||
MONTH
|
||||
| "jour" ->
|
||||
L.update_acc lexbuf;
|
||||
DAY
|
||||
| digit, Star (digit | hspace), Opt (',', Rep (digit, 0 .. 2)), Star hspace, 0x20AC ->
|
||||
let extract_parts = R.regexp "([0-9]([0-9 ]*[0-9]|))(,([0-9]{0,2})|)" in
|
||||
let str = Utf8.lexeme lexbuf in
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts str) in
|
||||
(* Integer literal*)
|
||||
let units = parts 1 in
|
||||
let remove_spaces = R.regexp " " in
|
||||
let units =
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_spaces ~subst:(fun _ -> "") units)
|
||||
in
|
||||
let cents =
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0
|
||||
in
|
||||
L.update_acc lexbuf;
|
||||
MONEY_AMOUNT (units, cents)
|
||||
| Plus digit, ',', Star digit ->
|
||||
let extract_code_title = R.regexp "([0-9]+),([0-9]*)" in
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in
|
||||
(* Integer literal*)
|
||||
L.update_acc lexbuf;
|
||||
DECIMAL_LITERAL
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
||||
| "<=@" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DATE
|
||||
| "<@" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DATE
|
||||
| ">=@" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DATE
|
||||
| ">@" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DATE
|
||||
| "-@" ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDATE
|
||||
| "+@" ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDATE
|
||||
| "<=^" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DURATION
|
||||
| "<^" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DURATION
|
||||
| ">=^" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DURATION
|
||||
| ">^" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DURATION
|
||||
| "+^" ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDURATION
|
||||
| "-^" ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDURATION
|
||||
| "/^" ->
|
||||
L.update_acc lexbuf;
|
||||
DIVDURATION
|
||||
| "<=", 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_MONEY
|
||||
| '<', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_MONEY
|
||||
| ">=", 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_MONEY
|
||||
| '>', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_MONEY
|
||||
| '+', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSMONEY
|
||||
| '-', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSMONEY
|
||||
| '*', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
MULTMONEY
|
||||
| '/', 0x20AC ->
|
||||
L.update_acc lexbuf;
|
||||
DIVMONEY
|
||||
| "<=." ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL_DEC
|
||||
| "<." ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_DEC
|
||||
| ">=." ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL_DEC
|
||||
| ">." ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_DEC
|
||||
| "+." ->
|
||||
L.update_acc lexbuf;
|
||||
PLUSDEC
|
||||
| "-." ->
|
||||
L.update_acc lexbuf;
|
||||
MINUSDEC
|
||||
| "*." ->
|
||||
L.update_acc lexbuf;
|
||||
MULTDEC
|
||||
| "/." ->
|
||||
L.update_acc lexbuf;
|
||||
DIVDEC
|
||||
| "<=" ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER_EQUAL
|
||||
| '<' ->
|
||||
L.update_acc lexbuf;
|
||||
LESSER
|
||||
| ">=" ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER_EQUAL
|
||||
| '>' ->
|
||||
L.update_acc lexbuf;
|
||||
GREATER
|
||||
| '+' ->
|
||||
L.update_acc lexbuf;
|
||||
PLUS
|
||||
| '-' ->
|
||||
L.update_acc lexbuf;
|
||||
MINUS
|
||||
| '*' ->
|
||||
L.update_acc lexbuf;
|
||||
MULT
|
||||
| '/' ->
|
||||
L.update_acc lexbuf;
|
||||
DIV
|
||||
| "!=" ->
|
||||
L.update_acc lexbuf;
|
||||
NOT_EQUAL
|
||||
| '=' ->
|
||||
L.update_acc lexbuf;
|
||||
EQUAL
|
||||
| '%' ->
|
||||
L.update_acc lexbuf;
|
||||
PERCENT
|
||||
| '(' ->
|
||||
L.update_acc lexbuf;
|
||||
LPAREN
|
||||
| ')' ->
|
||||
L.update_acc lexbuf;
|
||||
RPAREN
|
||||
| '{' ->
|
||||
L.update_acc lexbuf;
|
||||
LBRACKET
|
||||
| '}' ->
|
||||
L.update_acc lexbuf;
|
||||
RBRACKET
|
||||
| '[' ->
|
||||
L.update_acc lexbuf;
|
||||
LSQUARE
|
||||
| ']' ->
|
||||
L.update_acc lexbuf;
|
||||
RSQUARE
|
||||
| '|' ->
|
||||
L.update_acc lexbuf;
|
||||
VERTICAL
|
||||
| ':' ->
|
||||
L.update_acc lexbuf;
|
||||
COLON
|
||||
| ';' ->
|
||||
L.update_acc lexbuf;
|
||||
SEMICOLON
|
||||
| "--" ->
|
||||
L.update_acc lexbuf;
|
||||
ALT
|
||||
| "++" ->
|
||||
L.update_acc lexbuf;
|
||||
CONCAT
|
||||
| '.' ->
|
||||
L.update_acc lexbuf;
|
||||
DOT
|
||||
| uppercase, Star (uppercase | lowercase | digit | '_' | '\'') ->
|
||||
(* Name of constructor *)
|
||||
L.update_acc lexbuf;
|
||||
CONSTRUCTOR (Utf8.lexeme lexbuf)
|
||||
| lowercase, Star (lowercase | uppercase | digit | '_' | '\'') ->
|
||||
(* Name of variable *)
|
||||
L.update_acc lexbuf;
|
||||
IDENT (Utf8.lexeme lexbuf)
|
||||
| Plus digit ->
|
||||
(* Integer literal*)
|
||||
L.update_acc lexbuf;
|
||||
INT_LITERAL (Runtime.integer_of_string (Utf8.lexeme lexbuf))
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
let rec lex_directive_args (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| '@', Star hspace, "p.", Star hspace, Plus digit ->
|
||||
let s = Utf8.lexeme lexbuf in
|
||||
let i = String.index s '.' in
|
||||
AT_PAGE (int_of_string (String.trim (String.sub s i (String.length s - i))))
|
||||
| Plus (Compl white_space) -> DIRECTIVE_ARG (Utf8.lexeme lexbuf)
|
||||
| Plus hspace -> lex_directive_args lexbuf
|
||||
| '\n' | eof ->
|
||||
L.context := Law;
|
||||
END_DIRECTIVE
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
let rec lex_directive (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let prev_pos = lexing_positions lexbuf in
|
||||
match%sedlex lexbuf with
|
||||
| Plus hspace -> lex_directive lexbuf
|
||||
| 'D', 0xE9, "but", Plus hspace, "m", 0xE9, "tadonn", 0xE9, "es" -> BEGIN_METADATA
|
||||
| "Fin", Plus hspace, "m", 0xE9, "tadonn", 0xE9, "es" -> END_METADATA
|
||||
| "Inclusion" -> LAW_INCLUDE
|
||||
| ':' ->
|
||||
L.context := Directive_args;
|
||||
COLON
|
||||
| '\n' | eof ->
|
||||
L.context := Law;
|
||||
END_DIRECTIVE
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
(** Main lexing function used outside code blocks *)
|
||||
let lex_law (lexbuf : lexbuf) : token =
|
||||
let prev_lexeme = Utf8.lexeme lexbuf in
|
||||
let ((_, start_pos) as prev_pos) = lexing_positions lexbuf in
|
||||
let at_bol = Lexing.(start_pos.pos_bol = start_pos.pos_cnum) in
|
||||
if at_bol then
|
||||
match%sedlex lexbuf with
|
||||
| eof -> EOF
|
||||
| "```catala", Plus white_space ->
|
||||
L.context := Code;
|
||||
Buffer.clear L.code_buffer;
|
||||
BEGIN_CODE
|
||||
| '>' ->
|
||||
L.context := Directive;
|
||||
BEGIN_DIRECTIVE
|
||||
| Plus '#', Star hspace, Plus (Compl '\n'), Star hspace, ('\n' | eof) ->
|
||||
L.get_law_heading lexbuf
|
||||
| _ -> (
|
||||
(* Nested match for lower priority; `_` matches length 0 so we effectively retry the
|
||||
sub-match at the same point *)
|
||||
let lexbuf = lexbuf in
|
||||
(* workaround sedlex bug, see https://github.com/ocaml-community/sedlex/issues/12 *)
|
||||
match%sedlex lexbuf with
|
||||
| Star (Compl '\n'), ('\n' | eof) -> LAW_TEXT (Utf8.lexeme lexbuf)
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme)
|
||||
else
|
||||
match%sedlex lexbuf with
|
||||
| eof -> EOF
|
||||
| Star (Compl '\n'), ('\n' | eof) -> LAW_TEXT (Utf8.lexeme lexbuf)
|
||||
| _ -> L.raise_lexer_error (Pos.from_lpos prev_pos) prev_lexeme
|
||||
|
||||
(** Entry point of the lexer, distributes to {!val: lex_code} or {!val: lex_law} depending of {!val:
|
||||
Surface.Lexer_common.is_code}. *)
|
||||
let lexer (lexbuf : lexbuf) : token =
|
||||
match !L.context with
|
||||
| Law -> lex_law lexbuf
|
||||
| Code -> lex_code lexbuf
|
||||
| Directive -> lex_directive lexbuf
|
||||
| Directive_args -> lex_directive_args lexbuf
|
139
compiler/surface/lexer_pl.cppo.ml
Normal file
139
compiler/surface/lexer_pl.cppo.ml
Normal file
@ -0,0 +1,139 @@
|
||||
(* -*- coding: iso-latin-1 -*- *)
|
||||
|
||||
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
||||
computation rules. Copyright (C) 2020 Inria, contributors: Denis Merigoux
|
||||
<denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the License for the specific language governing permissions and limitations under
|
||||
the License. *)
|
||||
|
||||
(* Defining the lexer macros for Polish *)
|
||||
|
||||
(* Tokens and their corresponding sedlex regexps *)
|
||||
|
||||
#define MS_SCOPE "zakres"
|
||||
#define MS_CONSEQUENCE "konsekwencja"
|
||||
#define MS_DATA "data"
|
||||
#define MS_DEPENDS "zalezy od"
|
||||
#define MR_DEPENDS "zalezy", space_plus, "od"
|
||||
#define MS_DECLARATION "deklaracja"
|
||||
#define MS_CONTEXT "kontekst"
|
||||
#define MS_DECREASING "malejacy"
|
||||
#define MS_INCREASING "rosnacy"
|
||||
#define MS_OF "z"
|
||||
#define MS_COLLECTION "kolekcja"
|
||||
#define MS_ENUM "enumeracja"
|
||||
#define MS_INTEGER "calkowita"
|
||||
#define MS_MONEY "pieni\x01\x05dze"
|
||||
#define MR_MONEY "pieni", 0x0105, "dze"
|
||||
#define MS_TEXT "tekst"
|
||||
#define MS_DECIMAL "dziesi\x01\x19tny"
|
||||
#define MR_DECIMAL "dziesi", 0x0119, "tny"
|
||||
#define MS_DATE "czas"
|
||||
#define MS_DURATION "czas trwania"
|
||||
#define MR_DURATION "czas", space_plus, "trwania"
|
||||
#define MS_BOOLEAN "zerojedynkowy"
|
||||
#define MS_SUM "suma"
|
||||
#define MS_FILLED "spelnione"
|
||||
#define MS_DEFINITION "definicja"
|
||||
#define MS_LABEL "etykieta"
|
||||
#define MS_EXCEPTION "wyj\x01\x05tek"
|
||||
#define MR_EXCEPTION "wyj", 0x0105, "tek"
|
||||
#define MS_DEFINED_AS "wynosi"
|
||||
#define MS_MATCH "pasuje"
|
||||
#define MS_WILDCARD "cokolwiek"
|
||||
#define MS_WITH "ze wzorem"
|
||||
#define MR_WITH "ze", space_plus, "wzorem"
|
||||
#define MS_UNDER_CONDITION "pod warunkiem"
|
||||
#define MR_UNDER_CONDITION "pod", space_plus, "warunkiem"
|
||||
#define MS_IF "jezeli"
|
||||
#define MS_THEN "wtedy"
|
||||
#define MS_ELSE "inaczej"
|
||||
#define MS_CONDITION "warunek"
|
||||
#define MS_CONTENT "typu"
|
||||
#define MS_STRUCT "struktura"
|
||||
#define MS_ASSERTION "asercja"
|
||||
#define MS_VARIES "rozna"
|
||||
#define MS_WITH_V "wraz z"
|
||||
#define MR_WITH_V "wraz", space_plus, "z"
|
||||
#define MS_FOR "dla"
|
||||
#define MS_ALL "wszystkie"
|
||||
#define MS_WE_HAVE "mamy"
|
||||
#define MS_FIXED "staloprzecinkowa"
|
||||
#define MS_BY "przez"
|
||||
#define MS_RULE "zasada"
|
||||
#define MS_EXISTS "istnieje"
|
||||
#define MS_IN "in"
|
||||
#define MS_SUCH "takie ze"
|
||||
#define MR_SUCH "takie", space_plus, "ze"
|
||||
#define MS_THAT "to"
|
||||
#define MS_AND "i"
|
||||
#define MS_OR "lub"
|
||||
#define MS_XOR "xor"
|
||||
#define MS_NOT "nie"
|
||||
#define MS_MAXIMUM "maximum"
|
||||
#define MS_MINIMUM "minimum"
|
||||
#define MS_FILTER "filtr"
|
||||
#define MS_MAP "mapuj"
|
||||
#define MS_INIT "poczatkowy"
|
||||
#define MS_CARDINAL "liczba"
|
||||
#define MS_YEAR "rok"
|
||||
#define MS_MONTH "miesiac"
|
||||
#define MS_DAY "dzien"
|
||||
#define MS_TRUE "prawda"
|
||||
#define MS_FALSE "falsz"
|
||||
|
||||
#define MR_MONEY_OP_SUFFIX '$'
|
||||
|
||||
(* Builtins *)
|
||||
|
||||
#define MS_IntToDec "integer_to_decimal"
|
||||
#define MS_GetDay "get_day"
|
||||
#define MS_GetMonth "get_month"
|
||||
#define MS_GetYear "get_year"
|
||||
|
||||
(* Directives *)
|
||||
|
||||
#define MR_BEGIN_METADATA "Poczatek", Plus hspace, "metadanych"
|
||||
#define MR_END_METADATA "Koniec", Plus hspace, "metadanych"
|
||||
#define MR_LAW_INCLUDE "Include"
|
||||
#define MX_AT_PAGE \
|
||||
'@', Star hspace, "p.", Star hspace, Plus digit -> \
|
||||
let s = Utf8.lexeme lexbuf in \
|
||||
let i = String.index s '.' in \
|
||||
AT_PAGE (int_of_string (String.trim (String.sub s i (String.length s - i))))
|
||||
|
||||
(* More complex cases *)
|
||||
|
||||
#define MX_MONEY_AMOUNT \
|
||||
digit, Star (digit | ','), Opt ('.', Rep (digit, 0 .. 2)), Star hspace, "PLN" -> \
|
||||
let extract_parts = R.regexp "([0-9]([0-9,]*[0-9]|))(.([0-9]{0,2})|)" in \
|
||||
let str = Utf8.lexeme lexbuf in \
|
||||
let parts = R.get_substring (R.exec ~rex:extract_parts str) in \
|
||||
(* Integer literal*) \
|
||||
let units = parts 1 in \
|
||||
let remove_commas = R.regexp "," in \
|
||||
let units = \
|
||||
Runtime.integer_of_string (R.substitute ~rex:remove_commas ~subst:(fun _ -> "") units) \
|
||||
in \
|
||||
let cents = \
|
||||
try Runtime.integer_of_string (parts 4) with Not_found -> Runtime.integer_of_int 0 \
|
||||
in \
|
||||
L.update_acc lexbuf; \
|
||||
MONEY_AMOUNT (units, cents)
|
||||
|
||||
#define MX_DECIMAL_LITERAL \
|
||||
Plus digit, '.', Star digit -> \
|
||||
let extract_code_title = R.regexp "([0-9]+)\\.([0-9]*)" in \
|
||||
let dec_parts = R.get_substring (R.exec ~rex:extract_code_title (Utf8.lexeme lexbuf)) in \
|
||||
(* Integer literal*) \
|
||||
L.update_acc lexbuf; \
|
||||
DECIMAL_LITERAL \
|
||||
(Runtime.integer_of_string (dec_parts 1), Runtime.integer_of_string (dec_parts 2))
|
@ -786,7 +786,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CARDINAL YEAR
|
||||
## Ends in an error in state: 97.
|
||||
##
|
||||
## aggregate_func -> CARDINAL . [ FOR ]
|
||||
## primitive_expression -> CARDINAL . [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## primitive_expression -> CARDINAL . [ XOR WITH THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## CARDINAL
|
||||
@ -798,8 +798,8 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR CONTENT TR
|
||||
##
|
||||
## Ends in an error in state: 189.
|
||||
##
|
||||
## enum_inject_content -> CONTENT small_expression . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## enum_inject_content -> CONTENT small_expression . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## CONTENT small_expression
|
||||
@ -811,7 +811,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR CONTENT YE
|
||||
##
|
||||
## Ends in an error in state: 188.
|
||||
##
|
||||
## enum_inject_content -> CONTENT . small_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## enum_inject_content -> CONTENT . small_expression [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## CONTENT
|
||||
@ -823,7 +823,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR DOT CONSTR
|
||||
##
|
||||
## Ends in an error in state: 187.
|
||||
##
|
||||
## struct_or_enum_inject -> constructor option(preceded(DOT,constructor)) . option(enum_inject_content) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## struct_or_enum_inject -> constructor option(preceded(DOT,constructor)) . option(enum_inject_content) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## constructor option(preceded(DOT,constructor))
|
||||
@ -835,7 +835,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR DOT YEAR
|
||||
##
|
||||
## Ends in an error in state: 107.
|
||||
##
|
||||
## option(preceded(DOT,constructor)) -> DOT . constructor [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONTENT CONSTRUCTOR CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## option(preceded(DOT,constructor)) -> DOT . constructor [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONTENT CONSTRUCTOR CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## DOT
|
||||
@ -908,7 +908,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET A
|
||||
##
|
||||
## Ends in an error in state: 91.
|
||||
##
|
||||
## struct_inject_content -> LBRACKET ALT . separated_nonempty_list(ALT,struct_content_field) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## struct_inject_content -> LBRACKET ALT . separated_nonempty_list(ALT,struct_content_field) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## LBRACKET ALT
|
||||
@ -920,7 +920,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR LBRACKET Y
|
||||
##
|
||||
## Ends in an error in state: 90.
|
||||
##
|
||||
## struct_inject_content -> LBRACKET . ALT separated_nonempty_list(ALT,struct_content_field) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## struct_inject_content -> LBRACKET . ALT separated_nonempty_list(ALT,struct_content_field) RBRACKET [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## LBRACKET
|
||||
@ -932,8 +932,8 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION CONSTRUCTOR YEAR
|
||||
##
|
||||
## Ends in an error in state: 89.
|
||||
##
|
||||
## struct_or_enum_inject -> constructor . option(preceded(DOT,constructor)) option(enum_inject_content) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## struct_or_enum_inject -> constructor . struct_inject_content [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## struct_or_enum_inject -> constructor . option(preceded(DOT,constructor)) option(enum_inject_content) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## struct_or_enum_inject -> constructor . struct_inject_content [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## constructor
|
||||
@ -1270,7 +1270,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION INT_LITERAL WITH_V
|
||||
##
|
||||
## Ends in an error in state: 81.
|
||||
##
|
||||
## literal -> num_literal . option(unit_literal) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> num_literal . option(unit_literal) [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## num_literal
|
||||
@ -1282,7 +1282,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LPAREN TRUE THEN
|
||||
##
|
||||
## Ends in an error in state: 228.
|
||||
##
|
||||
## atomic_expression -> LPAREN expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## atomic_expression -> LPAREN expression . RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## LPAREN expression
|
||||
@ -1306,7 +1306,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LPAREN YEAR
|
||||
##
|
||||
## Ends in an error in state: 54.
|
||||
##
|
||||
## atomic_expression -> LPAREN . expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## atomic_expression -> LPAREN . expression RPAREN [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## LPAREN
|
||||
@ -1355,7 +1355,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION LSQUARE YEAR
|
||||
##
|
||||
## Ends in an error in state: 50.
|
||||
##
|
||||
## primitive_expression -> LSQUARE . loption(separated_nonempty_list(SEMICOLON,expression)) RSQUARE [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## primitive_expression -> LSQUARE . loption(separated_nonempty_list(SEMICOLON,expression)) RSQUARE [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## LSQUARE
|
||||
@ -1367,7 +1367,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN TRUE
|
||||
##
|
||||
## Ends in an error in state: 121.
|
||||
##
|
||||
## aggregate -> aggregate_func FOR ident IN primitive_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func FOR ident IN primitive_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func FOR ident IN primitive_expression OF
|
||||
@ -1379,7 +1379,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN TRUE
|
||||
##
|
||||
## Ends in an error in state: 120.
|
||||
##
|
||||
## aggregate -> aggregate_func FOR ident IN primitive_expression . OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func FOR ident IN primitive_expression . OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func FOR ident IN primitive_expression
|
||||
@ -1397,7 +1397,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT IN YEAR
|
||||
##
|
||||
## Ends in an error in state: 119.
|
||||
##
|
||||
## aggregate -> aggregate_func FOR ident IN . primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func FOR ident IN . primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func FOR ident IN
|
||||
@ -1409,7 +1409,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR IDENT YEAR
|
||||
##
|
||||
## Ends in an error in state: 118.
|
||||
##
|
||||
## aggregate -> aggregate_func FOR ident . IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func FOR ident . IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func FOR ident
|
||||
@ -1421,7 +1421,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP FOR YEAR
|
||||
##
|
||||
## Ends in an error in state: 117.
|
||||
##
|
||||
## aggregate -> aggregate_func FOR . ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func FOR . ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func FOR
|
||||
@ -1433,7 +1433,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION MAP YEAR
|
||||
##
|
||||
## Ends in an error in state: 116.
|
||||
##
|
||||
## aggregate -> aggregate_func . FOR ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## aggregate -> aggregate_func . FOR ident IN primitive_expression OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## aggregate_func
|
||||
@ -1690,7 +1690,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE DOT CONSTRUCTOR D
|
||||
##
|
||||
## Ends in an error in state: 64.
|
||||
##
|
||||
## small_expression -> small_expression DOT option(terminated(constructor,DOT)) . ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression DOT option(terminated(constructor,DOT)) . ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## small_expression DOT option(terminated(constructor,DOT))
|
||||
@ -1714,7 +1714,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE DOT YEAR
|
||||
##
|
||||
## Ends in an error in state: 63.
|
||||
##
|
||||
## small_expression -> small_expression DOT . option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression DOT . option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## small_expression DOT
|
||||
@ -1726,7 +1726,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE IN YEAR
|
||||
##
|
||||
## Ends in an error in state: 124.
|
||||
##
|
||||
## base_expression -> primitive_expression IN . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression IN . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## primitive_expression IN
|
||||
@ -1738,8 +1738,8 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE INCREASING
|
||||
##
|
||||
## Ends in an error in state: 140.
|
||||
##
|
||||
## mult_expression -> base_expression . [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## mult_expression -> base_expression . mult_op mult_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## mult_expression -> base_expression . [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## mult_expression -> base_expression . mult_op mult_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## base_expression
|
||||
@ -1758,7 +1758,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE MULTMONEY YEAR
|
||||
##
|
||||
## Ends in an error in state: 148.
|
||||
##
|
||||
## mult_expression -> base_expression mult_op . mult_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## mult_expression -> base_expression mult_op . mult_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DEFINITION DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## base_expression mult_op
|
||||
@ -1782,7 +1782,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE OF YEAR
|
||||
##
|
||||
## Ends in an error in state: 113.
|
||||
##
|
||||
## base_expression -> primitive_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression OF . base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## primitive_expression OF
|
||||
@ -1806,10 +1806,10 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WE_HAVE
|
||||
##
|
||||
## Ends in an error in state: 100.
|
||||
##
|
||||
## base_expression -> primitive_expression . [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . WITH constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . IN base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . OF base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . WITH constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression . IN base_expression [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## primitive_expression
|
||||
@ -1827,7 +1827,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR
|
||||
##
|
||||
## Ends in an error in state: 102.
|
||||
##
|
||||
## constructor_binding -> maybe_qualified_constructor . optional_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## constructor_binding -> maybe_qualified_constructor . optional_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## maybe_qualified_constructor
|
||||
@ -1846,7 +1846,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR
|
||||
##
|
||||
## Ends in an error in state: 104.
|
||||
##
|
||||
## optional_binding -> OF maybe_qualified_constructor . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## optional_binding -> OF maybe_qualified_constructor . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## OF maybe_qualified_constructor
|
||||
@ -1865,8 +1865,8 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR
|
||||
##
|
||||
## Ends in an error in state: 103.
|
||||
##
|
||||
## optional_binding -> OF . ident [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## optional_binding -> OF . maybe_qualified_constructor constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## optional_binding -> OF . ident [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## optional_binding -> OF . maybe_qualified_constructor constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## OF
|
||||
@ -1878,7 +1878,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH CONSTRUCTOR
|
||||
##
|
||||
## Ends in an error in state: 106.
|
||||
##
|
||||
## maybe_qualified_constructor -> constructor . option(preceded(DOT,constructor)) [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSTRUCTOR CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## maybe_qualified_constructor -> constructor . option(preceded(DOT,constructor)) [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSTRUCTOR CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## constructor
|
||||
@ -1890,7 +1890,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE WITH YEAR
|
||||
##
|
||||
## Ends in an error in state: 101.
|
||||
##
|
||||
## base_expression -> primitive_expression WITH . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## base_expression -> primitive_expression WITH . constructor_binding [ XOR THEN SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## primitive_expression WITH
|
||||
@ -1914,8 +1914,8 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION TRUE YEAR
|
||||
##
|
||||
## Ends in an error in state: 62.
|
||||
##
|
||||
## primitive_expression -> small_expression . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## primitive_expression -> small_expression . [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
## small_expression -> small_expression . DOT option(terminated(constructor,DOT)) ident [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## small_expression
|
||||
@ -1927,7 +1927,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL INT_LITERAL M
|
||||
##
|
||||
## Ends in an error in state: 28.
|
||||
##
|
||||
## literal -> VERTICAL date_int MINUS date_int MINUS date_int . VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL date_int MINUS date_int MINUS date_int . VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL date_int MINUS date_int MINUS date_int
|
||||
@ -1939,7 +1939,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL INT_LITERAL M
|
||||
##
|
||||
## Ends in an error in state: 27.
|
||||
##
|
||||
## literal -> VERTICAL date_int MINUS date_int MINUS . date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL date_int MINUS date_int MINUS . date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL date_int MINUS date_int MINUS
|
||||
@ -1951,7 +1951,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL INT_LITERAL M
|
||||
##
|
||||
## Ends in an error in state: 26.
|
||||
##
|
||||
## literal -> VERTICAL date_int MINUS date_int . MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL date_int MINUS date_int . MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL date_int MINUS date_int
|
||||
@ -1963,7 +1963,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL INT_LITERAL M
|
||||
##
|
||||
## Ends in an error in state: 25.
|
||||
##
|
||||
## literal -> VERTICAL date_int MINUS . date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL date_int MINUS . date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL date_int MINUS
|
||||
@ -1975,7 +1975,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL INT_LITERAL Y
|
||||
##
|
||||
## Ends in an error in state: 24.
|
||||
##
|
||||
## literal -> VERTICAL date_int . MINUS date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL date_int . MINUS date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL date_int
|
||||
@ -1987,7 +1987,7 @@ source_file: BEGIN_CODE SCOPE CONSTRUCTOR UNDER_CONDITION VERTICAL YEAR
|
||||
##
|
||||
## Ends in an error in state: 22.
|
||||
##
|
||||
## literal -> VERTICAL . date_int MINUS date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE CONCAT COLON ASSERTION AND ALT ]
|
||||
## literal -> VERTICAL . date_int MINUS date_int MINUS date_int VERTICAL [ XOR WITH WE_HAVE THEN SUCH SEMICOLON SCOPE RULE RSQUARE RPAREN RBRACKET PLUSPLUS PLUSMONEY PLUSDURATION PLUSDEC PLUSDATE PLUS OR OF NOT_EQUAL MULTMONEY MULTDEC MULT MINUSMONEY MINUSDURATION MINUSDEC MINUSDATE MINUS LESSER_MONEY LESSER_EQUAL_MONEY LESSER_EQUAL_DURATION LESSER_EQUAL_DEC LESSER_EQUAL_DATE LESSER_EQUAL LESSER_DURATION LESSER_DEC LESSER_DATE LESSER LABEL INCREASING IN GREATER_MONEY GREATER_EQUAL_MONEY GREATER_EQUAL_DURATION GREATER_EQUAL_DEC GREATER_EQUAL_DATE GREATER_EQUAL GREATER_DURATION GREATER_DEC GREATER_DATE GREATER FOR EXCEPTION EQUAL END_CODE ELSE DOT DIVMONEY DIVDURATION DIVDEC DIV DEFINITION DECREASING DECLARATION CONSEQUENCE COLON ASSERTION AND ALT ]
|
||||
##
|
||||
## The known suffix of the stack is as follows:
|
||||
## VERTICAL
|
||||
|
@ -22,7 +22,7 @@
|
||||
%}
|
||||
|
||||
%parameter<Localisation: sig
|
||||
val builtins: (string * Ast.builtin_expression) list
|
||||
val lex_builtin: string -> Ast.builtin_expression option
|
||||
end>
|
||||
|
||||
%type <Ast.source_file> source_file
|
||||
@ -67,7 +67,9 @@ qident:
|
||||
|
||||
atomic_expression:
|
||||
| q = IDENT {
|
||||
(try Builtin (List.assoc q Localisation.builtins) with Not_found -> Ident q),
|
||||
(match Localisation.lex_builtin q with
|
||||
| Some b -> Builtin b
|
||||
| None -> Ident q),
|
||||
Pos.from_lpos $sloc }
|
||||
| l = literal { let (l, l_pos) = l in (Literal l, l_pos) }
|
||||
| LPAREN e = expression RPAREN { e }
|
||||
@ -235,7 +237,7 @@ sum_op:
|
||||
| MINUSDEC { (Sub KDec, Pos.from_lpos $sloc) }
|
||||
| PLUS { (Add KInt, Pos.from_lpos $sloc) }
|
||||
| MINUS { (Sub KInt, Pos.from_lpos $sloc) }
|
||||
| CONCAT { (Concat, Pos.from_lpos $sloc) }
|
||||
| PLUSPLUS { (Concat, Pos.from_lpos $sloc) }
|
||||
|
||||
sum_unop:
|
||||
| MINUS { (Minus KInt, Pos.from_lpos $sloc) }
|
||||
@ -436,11 +438,13 @@ scope_item:
|
||||
|
||||
ident:
|
||||
| i = IDENT {
|
||||
if List.mem_assoc i Localisation.builtins then
|
||||
Errors.raise_spanned_error
|
||||
(Printf.sprintf "Reserved builtin name")
|
||||
(Pos.from_lpos $sloc)
|
||||
else (i, Pos.from_lpos $sloc)
|
||||
match Localisation.lex_builtin i with
|
||||
| Some _ ->
|
||||
Errors.raise_spanned_error
|
||||
(Printf.sprintf "Reserved builtin name")
|
||||
(Pos.from_lpos $sloc)
|
||||
| None ->
|
||||
(i, Pos.from_lpos $sloc)
|
||||
}
|
||||
|
||||
condition_pos:
|
||||
|
@ -51,7 +51,7 @@
|
||||
%token PLUSDEC MINUSDEC MULTDEC DIVDEC
|
||||
%token PLUSMONEY MINUSMONEY MULTMONEY DIVMONEY
|
||||
%token MINUSDATE PLUSDATE PLUSDURATION MINUSDURATION DIVDURATION
|
||||
%token CONCAT
|
||||
%token PLUSPLUS
|
||||
%token MATCH WITH VARIES WITH_V WILDCARD
|
||||
%token FOR ALL WE_HAVE INCREASING DECREASING
|
||||
%token NOT BOOLEAN PERCENT DURATION
|
||||
|
Loading…
Reference in New Issue
Block a user