我正在尝试构建一个递归下降解析器来将任意 FOL 句子解析为 AST。然而,在开发过程中,我对如何解析
AtomicSentence
感到有点困惑。 AtomicSentence
可以解析为 Predicate(Term, ...)
或 Term = Term
。
比如我要解析Little(a, b, c) = d
,我会得到第一个TokenLittle
。在那种情况下,令牌Little
可以是函数名称或谓词名称,一旦我们解析等号,这对解析器来说就太晚了,最终将被解析。在这种情况下我应该如何做出正确的选择?
我有一个带有正则表达式的令牌类型
WORD
^[A-Z]\w*
而对于原子句
private AtomicSentenceASTNode atomicSentence() {
switch (this.lookAheadToken.type) {
case WORD: {
// Is it a Term?
// Or a Predicate?
}
}
return null;
}