我有 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 指出我无法创建词法分析器/解析器对的一个实例是正确的
我喜欢散列的想法,让代码看起来更好看,但我不认为它会加快我的速度。