У меня 9 разных грамматик. Одна из них будет загружена в зависимости от того, какая первая строка txt находится в файле, который она анализирует.
Я думал о выводе нереста лексера / парсера в sep. классы, а затем их создание, как только я получу совпадение - не уверен, замедлит ли это меня или нет. Я думаю, что некоторые тесты в порядке.
Действительно, скорость определенно моя цель, но я знаю, что это ужасный код.
Прямо сейчас код выглядит примерно так:
sin.mark(0)
site = findsite(txt)
sin.reset()
if ( site == "site1") {
loadlexer1;
loadparser1;
} else if (site == "site2") {
loadlexer2;
loadparser2;
}
.................
} else if (site == "site8") {
loadparser8;
loadparser8;
}
findsite(txt) {
...................
if line.indexOf("site1-identifier") {
site = site1;
} else if(line.indexOf("site2-identifier") {
site = site2;
} else if(line.indexOf("site3-identifier") {
site = site3;
}
.........................
} else if(line.indexOf("site8-identifier") {
site = site8;
}
}
некоторые уточнения
1) да, у меня действительно есть 9 различных грамматик, которые я построил с помощью antlr, поэтому они ВСЕ будут иметь свои собственные объекты лексера / парсера.
2) да, на данный момент мы сравниваем строки и, разумеется, это будет заменено некоторой целочисленной картой.
Я также подумал о том, чтобы вставить идентификаторы сайта в одно регулярное выражение, однако я не верю, что это что-то ускорит.
3) да, это псевдокод, поэтому я бы не стал слишком требователен к семантике здесь ..
4) kdgregory правильно отмечает, что я не могу создать один экземпляр пары лексер / парсер
Мне нравится идея хэша, чтобы код выглядел немного лучше, однако я не думаю, что это увеличит скорость до некоторой степени.