aboutsummaryrefslogtreecommitdiff
path: root/language/parser.ts
diff options
context:
space:
mode:
Diffstat (limited to 'language/parser.ts')
-rw-r--r--language/parser.ts23
1 files changed, 12 insertions, 11 deletions
diff --git a/language/parser.ts b/language/parser.ts
index 9bfdc4b..27aa5ee 100644
--- a/language/parser.ts
+++ b/language/parser.ts
@@ -7,27 +7,28 @@ import "../util/set.ts";
/** @summary main Parser class */
export default class Parser {
db: DB;
+ ready: Promise<void>;
constructor() {
this.db = new DB();
- }
- async prepare() {
- await Promise.all([
- this.db.prepare(),
- ]);
+ this.ready = new Promise<void>(async resolve => {
+ await this.db.ready;
+ resolve();
+ });
}
- parse(sentence: string, options?: InputSentenceProps): ParseResult {
- let parseResult = this.parseTerms(sentence, options);
+ async parse(sentence: string, options?: InputSentenceProps): Promise<ParseResult> {
+ await this.ready;
+ let parseResult = await this.parseTerms(sentence, options);
if ((options?.depth || ParseDepth.Term) <= ParseDepth.Term) return parseResult;
- parseResult = this.addGlossary(parseResult, options);
+ parseResult = await this.addGlossary(parseResult, options);
if ((options?.depth || ParseDepth.Term) <= ParseDepth.Term) return parseResult;
return parseResult;
}
/** @summary parse sentence into terms with readings */
- private parseTerms(sentence: string, options?: InputSentenceProps): ParseResult {
+ private async parseTerms(sentence: string, options?: InputSentenceProps): Promise<ParseResult> {
const MAX_LOOKAHEAD = options?.lookahead ?? 15;
const PRIORITY_MOD_HIGHER = options?.priorityMod?.high ?? 10;
const PRIORITY_MOD_LOWER = options?.priorityMod?.low ?? 0.1;
@@ -38,7 +39,7 @@ export default class Parser {
};
for (let start = 0; start < sentence.length; start++) {
- var results = this.db.findTerm(sentence.substring(start, start + MAX_LOOKAHEAD));
+ var results = await this.db.findTerm(sentence.substring(start, start + MAX_LOOKAHEAD));
// current starting point did not yield results, try again at next character or until end of input
if (results.length == 0) continue;
@@ -112,7 +113,7 @@ export default class Parser {
return parseResult;
}
- private addGlossary(input: ParseResult, options?: InputSentenceProps): ParseResult {
+ private async addGlossary(input: ParseResult, options?: InputSentenceProps): Promise<ParseResult> {
// TODO: annotate input with glossaries from DB
options; // prevent unused warning
return input;