! ----------------------------- ! ! Regular expressions for dates ! ! ----------------------------- ! Multichar_Symbols +Date %0 +Range ! This is what we want ! 31|[123]0|[012]?[1-9] ! Day ! (0)[1-9]|1[0-2] ! Month ! [0-9]{2}|[1-9]{3,4} ! Year ! Compiling: ! lexc ! compile-source num.txt ! source-to-result ! save-result num.fst ! quit ! lookup num.fst LEXICON Root EURODATES ; !ddmm(yy)yy, separator: . Now we also add dd.mm. AMERDATES ; !mmdd(yy)yy separator: - and . We do not add mm.dd. COMPDATES ; !(yy)yymmdd separator: - and . RANGE ; ![1-9]+ %-[1-9] LEXICON EURODATES Day ; LEXICON Day ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > Daytag ; LEXICON Daytag %. Month ; / Month ; %.%- 2EURODATES ; ! strict 12.-13. %- 2EURODATES ; ! liberal 12-13. %.% %-% 2EURODATES ; ! - Month ; LEXICON Month ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > Monthtag ; LEXICON Monthtag %. Year ; %.%- 2EURODATES ; %.% %-% 2EURODATES ; Taglexicon ; ! Now, 12.03. and 12.3. are dates. LEXICON Year ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > ESplit ; ! Year LEXICON ESplit Taglexicon ; %- 2EURODATES ; % %-% 2EURODATES ; LEXICON 2EURODATES 2Day ; LEXICON 2Day ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > 2Daytag ; LEXICON 2Daytag / Month ; %. 2Month ; ! - 2Month ; LEXICON 2Month ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > 2Monthtag ; LEXICON 2Monthtag %. 2Year ; ! - 2Year ; LEXICON 2Year ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > RangeTaglexicon ; ! Year ! AMER LEXICON AMERDATES AMonth ; LEXICON AMonth ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > AMonthtag ; LEXICON AMonthtag %. ADay ; / ADay ; - ADay ; LEXICON ADay ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > ADaytag ; LEXICON ADaytag %. AYear ; / AYear ; - AYear ; LEXICON AYear ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > ASplit ; ! Year LEXICON ASplit Taglexicon ; - 2AMERDATES ; LEXICON 2AMERDATES 2AMonth ; LEXICON 2AMonth ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > 2AMonthtag ; LEXICON 2AMonthtag %. 2ADay ; / 2ADay ; - 2ADay ; LEXICON 2ADay ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > 2ADaytag ; LEXICON 2ADaytag %. 2AYear ; / 2AYear ; - 2AYear ; LEXICON 2AYear ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > RangeTaglexicon ; ! Year LEXICON COMPDATES CYear ; LEXICON CYear ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > CYeartag ; ! Year LEXICON CYeartag / CMonth ; %. CMonth ; - CMonth ; LEXICON CMonth ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > CMonthtag ; LEXICON CMonthtag %. CDay ; / CDay ; - CDay ; LEXICON CDay ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > CSplit ; LEXICON CSplit Taglexicon ; - 2COMPDATES ; LEXICON 2COMPDATES 2CYear ; LEXICON 2CYear ! 00-9999, < [ "\x30" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]^{2,4} > 2CYeartag ; ! Year LEXICON 2CYeartag %. 2CMonth ; / 2CMonth ; - 2CMonth ; LEXICON 2CMonth ! 1-12, 01-12 < ("\x30") [ 1|2|3|4|5|6|7|8|9 ] | 1 [ "\x30" | 1 | 2 ] > 2CMonthtag ; LEXICON 2CMonthtag %. 2CDay ; / 2CDay ; - 2CDay ; LEXICON 2CDay ! 1-31, 01-31 < 3 1 | [ 1 | 2 | 3 ] "\x30" | ([ "\x30" | 1 | 2 ]) [ 1|2|3|4|5|6|7|8|9 ] > RangeTaglexicon ; LEXICON RANGE ! from-to < [ "\x30"|1|2|3|4|5|6|7|8|9 ]+ [ %-|%‒|%–|%—|%―] [ "\x30" |1|2|3|4|5|6|7|8|9 ]+ > RangeOnlyTaglexicon ; < [ "\x30"|1|2|3|4|5|6|7|8|9 ]+ % [ %-|%‒|%–|%—|%― ] % [ "\x30" |1|2|3|4|5|6|7|8|9 ]+ > RangeOnlyTaglexicon ; ! < Num %- Num > vi kan ikkje skrive det sånn fordi vi får date også ! < date %- date > ! < [0-9]+%-[0-9]+ > !<[0-9] ! LEXICON RangeOnlyTaglexicon +Num+Range: # ; LEXICON RangeTaglexicon +Range: Taglexicon ; LEXICON Taglexicon +Date: # ;