-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathedot-2015-reader.rkt
63 lines (58 loc) · 3.66 KB
/
edot-2015-reader.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#lang br/quicklang
(provide read-syntax)
(require brag/support)
(require "edot-2015-parser.rkt")
(define (read-syntax path port)
(define parse-tree (parse path (make-tokenizer port)))
(define module-datum `(module bf-mod "edot-2015-expander.rkt"
,parse-tree))
(datum->syntax #f module-datum))
(define (make-tokenizer port)
(define (next-token)
(define edot-2015-lexer
(lexer
[(:or "а." "бәйл." "бәйл. сүз." "и." "иярт." "кер. сүз" "кис."
"мод. сүз." "мод. ф." "мөн." "рәв." "с." "сан" "терк." "ф."
"хәб. сүз" "ы." "энд." "ярд.")
(token 'POS lexeme)]
["мәгъ." (token 'CONV lexeme)]
[(:or "алб." "амхар" "әрм." "баконго" "бурят" "венг." "гар." "голл."
"гр." "груз." "ингл." "исланд" "исп." "ит." "кельт" "кечуа"
"коми" "кыт." "лат." "литв." "малая" "мар." "монг." "мордв."
"нем." "пол." "португ." "румын" "рус" "саам" "санскр." "сканд."
"слав." "тамил" "тат." "төрек" "төрки" "тунг." "тупи" "удм."
"уйг." "укр." "үзб." "фар." "фин" "фин-угор" "фр." "һинд" "чех."
"эст." "як." "яп." "яһүд")
(token 'ETYM lexeme)]
[(:or "авиа." "агроэкол." "анат." "археол." "архит." "астр." "а.х."
"әд." "әрл." "биол." "биохим." "бор." "бот." "вет." "гади с."
"геогр." "геол." "геом." "грам." "диал." "дини" "диңгез."
"жарг." "җыр" "зоол." "икът." "информ." "ирк." "ирон." "иск."
"иҗт." "карг." "кимс." "кино" "кит." "комп." "кулин." "күч."
"лингв." "лог." "мат." "махс." "мед." "метеор." "микробиол."
"минер." "миф." "муз." "мыск." "неол." "нәфр." "пед." "психол."
"радио" "рәсм." "ритор." "сәнг." "сәяси" "сир." "сөйл." "спорт"
"сын." "тар." "тасв." "театр" "тех." "типогр." "тирг." "төзел."
"туп." "фарм." "физ." "физиол." "филос." "финанс." "фольк."
"фото." "функ." "хим." "хуплм." "хупл." "хурл." "хәрби"
"шаярт." "шелт." "шигъ." "шөб." "эвф." "энд." "электро."
"эпис." "этн." "юг." "юр.")
(token 'USAGE lexeme)]
["к." (token 'XR lexeme)]
[(:or "Мәдәни җомга" "Казан утлары" "Әкият" "Биология" "Ботаника"
"Гали Рәхим" "Кызыл таң"
(:seq upper-case "." upper-case (:* lower-case))) ;; "Ф.Әмирхан"
(token 'BIBL lexeme)]
[(:or whitespace "\n") (token lexeme #:skip? #t)]
[(:seq (:+ (char-set "IVX")) (:* ",")) (token 'HOM-NUM lexeme)]
[(:+ (:or upper-case "-" "́")) (token 'UPPER-CASE lexeme)]
["." (token 'DOT lexeme)]
[(:+ (char-set "!?")) (token 'OTHEREOSMARK lexeme)]
[(:+ (:or alphabetic numeric "–" "«" "»" "," "-" "\u00AD" ":" ";" "["
"]"))
(token 'W lexeme)]
[(:seq (:+ (char-set "0123456789")) (:or "." ")"))
(token 'SENSE-NUM lexeme)]
["◊" (token 'PHRASEMARK lexeme)]))
(edot-2015-lexer port))
next-token)