Skip to content

Commit 2dfc2f6

Browse files
committed
refactor
1 parent 25cd00e commit 2dfc2f6

File tree

17 files changed

+144
-139
lines changed

17 files changed

+144
-139
lines changed

src/parser/ast.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export type Emphasis =
33
| Readonly<{ type: "long word"; word: string; length: number }>;
44
export type Filler =
55
| Emphasis
6-
| Readonly<{ type: "multiple a"; count: number }>;
6+
| Readonly<{ type: "reduplicated a"; count: number }>;
77
export type SimpleHeadedWordUnit =
88
| Readonly<{ type: "simple"; word: string }>
99
| Readonly<{ type: "x ala x"; word: string }>
@@ -20,7 +20,7 @@ export type WordUnit =
2020
export type Nanpa = Readonly<{ nanpa: WordUnit; phrase: Phrase }>;
2121
export type Modifier =
2222
| Readonly<{ type: "simple"; word: WordUnit }>
23-
| Readonly<{ type: "proper words"; words: string }>
23+
| Readonly<{ type: "name"; words: string }>
2424
| Readonly<{ type: "pi"; phrase: Phrase }>
2525
| (Readonly<{ type: "nanpa" }> & Nanpa);
2626
export type Phrase =
@@ -39,27 +39,27 @@ export type Phrase =
3939
}>
4040
| (Readonly<{ type: "preposition" }> & Preposition);
4141
export type MultiplePhrases =
42-
| Readonly<{ type: "single"; phrase: Phrase }>
42+
| Readonly<{ type: "simple"; phrase: Phrase }>
4343
| Readonly<{
44-
type: "and conjunction";
44+
type: "and";
4545
phrases: ReadonlyArray<MultiplePhrases>;
4646
}>
4747
| Readonly<{ type: "anu"; phrases: ReadonlyArray<MultiplePhrases> }>;
4848
export type Preposition = Readonly<{
4949
preposition: HeadedWordUnit;
5050
modifiers: ReadonlyArray<Modifier>;
51-
phrases: Readonly<{ type: "single" | "anu" }> & MultiplePhrases;
51+
phrases: Readonly<{ type: "simple" | "anu" }> & MultiplePhrases;
5252
emphasis: null | Emphasis;
5353
}>;
5454
export type Predicate =
55-
| Readonly<{ type: "single"; predicate: Phrase }>
55+
| Readonly<{ type: "simple"; predicate: Phrase }>
5656
| Readonly<{
5757
type: "associated";
5858
predicates: MultiplePhrases;
5959
objects: null | MultiplePhrases;
6060
prepositions: ReadonlyArray<Preposition>;
6161
}>
62-
| Readonly<{ type: "and conjunction"; predicates: ReadonlyArray<Predicate> }>
62+
| Readonly<{ type: "and"; predicates: ReadonlyArray<Predicate> }>
6363
| Readonly<{ type: "anu"; predicates: ReadonlyArray<Predicate> }>;
6464
export type Clause =
6565
| Readonly<{ type: "phrases"; phrases: MultiplePhrases }>

src/parser/composer.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function emphasis(emphasis: Emphasis): string {
2626
}
2727
export function filler(filler: Filler): string {
2828
switch (filler.type) {
29-
case "multiple a":
29+
case "reduplicated a":
3030
return repeatWithSpace("a", filler.count);
3131
default:
3232
return emphasis(filler);
@@ -61,7 +61,7 @@ export function modifier(modifier: Modifier): string {
6161
switch (modifier.type) {
6262
case "simple":
6363
return wordUnit(modifier.word);
64-
case "proper words":
64+
case "name":
6565
return modifier.words;
6666
case "pi":
6767
return `pi ${phrase(modifier.phrase)}`;
@@ -90,8 +90,8 @@ export function phrase(value: Phrase): string {
9090
return preposition(value);
9191
}
9292
}
93-
function particle(type: "and conjunction" | "anu", particle: null | string) {
94-
if (type === "and conjunction") {
93+
function particle(type: "and" | "anu", particle: null | string) {
94+
if (type === "and") {
9595
return particle!;
9696
} else {
9797
return "anu;";
@@ -102,9 +102,9 @@ export function multiplePhrases(
102102
andParticle: null | string,
103103
): string {
104104
switch (phrases.type) {
105-
case "single":
105+
case "simple":
106106
return phrase(phrases.phrase);
107-
case "and conjunction":
107+
case "and":
108108
case "anu": {
109109
return phrases.phrases
110110
.map((phrases) => multiplePhrases(phrases, andParticle))
@@ -126,7 +126,7 @@ export function multiplePredicates(
126126
andParticle: string,
127127
): string {
128128
switch (predicates.type) {
129-
case "single":
129+
case "simple":
130130
return phrase(predicates.predicate);
131131
case "associated": {
132132
return [
@@ -138,7 +138,7 @@ export function multiplePredicates(
138138
]
139139
.join(" ");
140140
}
141-
case "and conjunction":
141+
case "and":
142142
case "anu":
143143
return predicates.predicates
144144
.map((predicates) => multiplePredicates(predicates, andParticle))

src/parser/extract.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function everyWordUnitInModifier(
2525
return everyWordUnitInPhrase(modifier.phrase);
2626
case "nanpa":
2727
return everyWordUnitInNanpa(modifier);
28-
case "proper words":
28+
case "name":
2929
return [];
3030
}
3131
}
@@ -64,7 +64,7 @@ export function everyWordUnitInMultiplePredicates(
6464
predicate: Predicate,
6565
): ReadonlyArray<WordUnit> {
6666
switch (predicate.type) {
67-
case "single":
67+
case "simple":
6868
return everyWordUnitInPhrase(predicate.predicate);
6969
case "associated":
7070
return [
@@ -73,7 +73,7 @@ export function everyWordUnitInMultiplePredicates(
7373
.flatMap(everyWordUnitInMultiplePhrases),
7474
...predicate.prepositions.flatMap(everyWordUnitInPreposition),
7575
];
76-
case "and conjunction":
76+
case "and":
7777
case "anu":
7878
return predicate.predicates.flatMap(everyWordUnitInMultiplePredicates);
7979
}
@@ -150,9 +150,9 @@ export function everyPhraseInMultiplePhrases(
150150
phrases: MultiplePhrases,
151151
): ReadonlyArray<Phrase> {
152152
switch (phrases.type) {
153-
case "single":
153+
case "simple":
154154
return [phrases.phrase];
155-
case "and conjunction":
155+
case "and":
156156
case "anu":
157157
return phrases.phrases.flatMap(everyPhraseInMultiplePhrases);
158158
}
@@ -161,12 +161,12 @@ export function everyObjectInMultiplePredicates(
161161
predicates: Predicate,
162162
): ReadonlyArray<Phrase> {
163163
switch (predicates.type) {
164-
case "single":
164+
case "simple":
165165
return [];
166166
case "associated":
167167
return nullableAsArray(predicates.objects)
168168
.flatMap(everyPhraseInMultiplePhrases);
169-
case "and conjunction":
169+
case "and":
170170
case "anu":
171171
return predicates.predicates.flatMap(everyObjectInMultiplePredicates);
172172
}

src/parser/filter.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export const MODIFIER_RULES: ReadonlyArray<(modifier: Modifier) => boolean> = [
7979
// const checker = (modifier: Modifier) => {
8080
// switch (modifier.type) {
8181
// case "simple":
82-
// case "proper words":
82+
// case "name":
8383
// case "nanpa":
8484
// return everyModifierInPhrase(modifier.phrase).some(checker);
8585
// case "pi":
@@ -113,7 +113,7 @@ export const MULTIPLE_MODIFIERS_RULES: ReadonlyArray<
113113
// disallow multiple proper words
114114
(modifiers) =>
115115
modifiers
116-
.filter(({ type }) => type === "proper words")
116+
.filter(({ type }) => type === "name")
117117
.length <= 1 ||
118118
throwError(new UnrecognizedError("multiple proper words")),
119119

@@ -144,7 +144,7 @@ export const MULTIPLE_MODIFIERS_RULES: ReadonlyArray<
144144
} else {
145145
return [];
146146
}
147-
case "proper words":
147+
case "name":
148148
case "nanpa":
149149
return [];
150150
}
@@ -221,7 +221,7 @@ export const PREPOSITION_RULES: ReadonlyArray<
221221

222222
// inner phrase must not have emphasis particle
223223
(preposition) =>
224-
preposition.phrases.type !== "single" ||
224+
preposition.phrases.type !== "simple" ||
225225
!phraseHasTopLevelEmphasis(preposition.phrases.phrase),
226226

227227
// emphasis must not be nested
@@ -290,7 +290,7 @@ export const CLAUSE_RULES: ReadonlyArray<(clause: Clause) => boolean> = [
290290
if (
291291
clause.type === "li clause" &&
292292
clause.explicitLi &&
293-
clause.subjects.type === "single"
293+
clause.subjects.type === "simple"
294294
) {
295295
const { subjects: { phrase } } = clause;
296296
if (

src/parser/lexer.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ const combinedGlyphs = sequence(ucsur, allAtLeastOnce(joiner.with(ucsur)))
6363
.map(([first, rest]) => [first, ...rest]);
6464
const word = choiceOnlyOne(latinWord, singleUcsurWord);
6565
const properWords = allAtLeastOnce(
66-
match(/[A-Z][a-zA-Z]*/, "proper word").skip(spaces),
66+
match(/[A-Z][a-zA-Z]*/, "name").skip(spaces),
6767
)
6868
.map((array) => array.join(" "))
69-
.map((words): Token => ({ type: "proper word", words, kind: "latin" }));
69+
.map((words): Token => ({ type: "name", words, kind: "latin" }));
7070

7171
const specificWord = memoize((thatWord: string) =>
7272
word.filter((thisWord) =>
@@ -76,7 +76,7 @@ const specificWord = memoize((thatWord: string) =>
7676
);
7777
const multipleA = specificWord("a")
7878
.with(count(allAtLeastOnce(specificWord("a"))))
79-
.map((count): Token => ({ type: "multiple a", count: count + 1 }));
79+
.map((count): Token => ({ type: "reduplicated a", count: count + 1 }));
8080
const repeatingLetter = match(/[a-zA-Z]/, "latin letter")
8181
.then(memoize((letter) =>
8282
count(all(matchString(letter)))
@@ -142,7 +142,7 @@ const cartouche = specificSpecialUcsur(START_OF_CARTOUCHE)
142142
const cartouches = allAtLeastOnce(cartouche)
143143
.map((words) => words.join(" "))
144144
.map((words): Token => ({
145-
type: "proper word",
145+
type: "name",
146146
words,
147147
kind: "cartouche",
148148
}));

src/parser/parser.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const comma = punctuation
8282
);
8383
const optionalComma = optional(comma);
8484
const word = specificToken("word").map(({ word }) => word);
85-
const properWords = specificToken("proper word").map(({ words }) => words);
85+
const properWords = specificToken("name").map(({ words }) => words);
8686

8787
function wordFrom(set: Set<string>, description: string) {
8888
return word.filter((word) =>
@@ -286,7 +286,7 @@ const modifiers = sequence(
286286
.map((word): Modifier => ({ type: "simple", word }))
287287
.filter(filter(MODIFIER_RULES)),
288288
properWords
289-
.map((words): Modifier => ({ type: "proper words", words }))
289+
.map((words): Modifier => ({ type: "name", words }))
290290
.filter(filter(MODIFIER_RULES)),
291291
),
292292
),
@@ -305,7 +305,7 @@ const modifiers = sequence(
305305
])
306306
.filter(filter(MULTIPLE_MODIFIERS_RULES));
307307
const singlePhrase = phrase
308-
.map((phrase): MultiplePhrases => ({ type: "single", phrase }));
308+
.map((phrase): MultiplePhrases => ({ type: "simple", phrase }));
309309
const longAnu = sequence(
310310
specificToken("headless long glyph start").with(phrase),
311311
manyAtLeastOnce(
@@ -324,12 +324,12 @@ function nestedPhrasesOnly(
324324
return singlePhrase;
325325
} else {
326326
const [first, ...rest] = nestingRule;
327-
const type = first === "anu" ? "anu" : "and conjunction";
327+
const type = first === "anu" ? "anu" : "and";
328328
const longAnuParser = type === "anu"
329329
? longAnu.map((phrases): MultiplePhrases => ({
330330
type: "anu",
331331
phrases: phrases.map((phrase): MultiplePhrases => ({
332-
type: "single",
332+
type: "simple",
333333
phrase,
334334
})),
335335
}))
@@ -379,7 +379,7 @@ const preposition = choice(
379379
emphasis: null,
380380
},
381381
modifiers: [],
382-
phrases: { type: "single", phrase },
382+
phrases: { type: "simple", phrase },
383383
emphasis: null,
384384
})),
385385
sequence(
@@ -411,7 +411,7 @@ const preposition = choice(
411411
return {
412412
preposition: { type: "simple", word: words[0], emphasis: null },
413413
modifiers,
414-
phrases: { type: "single", phrase },
414+
phrases: { type: "simple", phrase },
415415
emphasis: null,
416416
};
417417
}),
@@ -424,7 +424,7 @@ const preposition = choice(
424424
},
425425
modifiers: [],
426426
phrases: {
427-
type: "single",
427+
type: "simple",
428428
phrase: {
429429
type: "simple",
430430
headWord: {
@@ -442,7 +442,7 @@ const preposition = choice(
442442
optionalCombined(prepositionSet, "preposition"),
443443
modifiers,
444444
nestedPhrases(["anu"]) as Parser<
445-
MultiplePhrases & { type: "single" | "anu" }
445+
MultiplePhrases & { type: "simple" | "anu" }
446446
>,
447447
optionalEmphasis,
448448
)
@@ -490,16 +490,16 @@ function multiplePredicates(
490490
if (nestingRule.length === 0) {
491491
return choice(
492492
associatedPredicates([]),
493-
phrase.map((predicate): Predicate => ({ type: "single", predicate })),
493+
phrase.map((predicate): Predicate => ({ type: "simple", predicate })),
494494
);
495495
} else {
496496
const [first, ...rest] = nestingRule;
497-
const type = first === "anu" ? "anu" : "and conjunction";
497+
const type = first === "anu" ? "anu" : "and";
498498
const longAnuParser: Parser<Predicate> = type === "anu"
499499
? longAnu.map((phrases): Predicate => ({
500500
type: "anu",
501501
predicates: phrases.map((predicate): Predicate => ({
502-
type: "single",
502+
type: "simple",
503503
predicate,
504504
})),
505505
}))
@@ -541,7 +541,7 @@ const clause = choice(
541541
.map(([subject, predicates]): Clause => ({
542542
type: "li clause",
543543
subjects: {
544-
type: "single",
544+
type: "simple",
545545
phrase: {
546546
type: "simple",
547547
headWord: {
@@ -631,8 +631,8 @@ const filler = choice(
631631
),
632632
)
633633
),
634-
specificToken("multiple a")
635-
.map(({ count }): Filler => ({ type: "multiple a", count })),
634+
specificToken("reduplicated a")
635+
.map(({ count }): Filler => ({ type: "reduplicated a", count })),
636636
specificToken("long word")
637637
.map(({ word, length }): Filler =>
638638
fillerSet.has(word)

src/parser/token.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ export type Token =
2929
type: "inside long glyph";
3030
words: ReadonlyArray<string>;
3131
}>
32-
| Readonly<{ type: "multiple a"; count: number }>
32+
| Readonly<{ type: "reduplicated a"; count: number }>
3333
| Readonly<{ type: "long word"; word: string; length: number }>
3434
| Readonly<{ type: "x ala x"; word: string }>
3535
| Readonly<{
36-
type: "proper word";
36+
type: "name";
3737
words: string;
3838
kind: "cartouche" | "latin";
3939
}>
@@ -53,15 +53,15 @@ export function describe(token: Token): string {
5353
case "headed long glyph end":
5454
case "inside long glyph":
5555
return "end of long glyph";
56-
case "multiple a":
56+
case "reduplicated a":
5757
return `"${repeatWithSpace("a", token.count)}"`;
5858
case "long word":
5959
return `"${token.word.repeat(token.length)}"`;
6060
case "x ala x":
6161
return `"${token.word} ala ${token.word}"`;
6262
case "punctuation":
6363
return `punctuation mark "${token.punctuation}"`;
64-
case "proper word":
64+
case "name":
6565
switch (token.kind) {
6666
case "cartouche":
6767
return "cartouche";

0 commit comments

Comments
 (0)