gpt4 book ai didi

java - 命题逻辑的 BNF 语法 ANTLR

转载 作者:行者123 更新时间:2023-12-02 07:19:56 25 4
gpt4 key购买 nike

我正在尝试在 Antlr 中为命题逻辑创建 BNF 语法,但我不断收到错误:

java.lang.NoSuchFieldError:offendingToken

由于没有显示行号,所以我不知道错误在哪里。构建成功,但当我输入示例输入时,树停在句子处,即 BNF 中定义的第一项。

这是我的 BNF:

grammar Grammar;

options {
language = Java;
output = AST;
ASTLabelType=CommonTree;
}

@header {
package antlr;
}

@members {

}

@lexer::header { //lexer
package antlr;
}

@lexer::members {

}

sentence: atomicsentence | complexsentence;

atomicsentence: 'T' | 'F' | symbol;

complexsentence: unop sentence | sentence binop sentence | (sentence);

unop: 'NOT';

binop: 'AND' | 'OR' | 'IMPLIES' | 'EQUIVALENT';

symbol: (LEXRULE)+;

LEXRULE: ('a'..'z')|('A'..'Z');

如果你注释掉句子中的复杂句子,原子句子部分就会起作用,直到它因为没有EOF而终止。我不确定这应该去哪里,因为将其添加到句子中不起作用。

最佳答案

(已编辑)

我已经重构了你的语法,所以它应该按照你的预期工作。

grammar Grammar;

options {
language = Java;
output = AST;
ASTLabelType=CommonTree;
}

tokens {
CODE;
}

@header {
package antlr;
}

@members {

}

@lexer::header { //lexer
package antlr;
}

@lexer::members {

}

code : sentence -> ^(CODE code);

sentence: UNOP? complexsentence (BINOP sentence)?;

atomicsentence: 'T' | 'F' | SYMBOL;

complexsentence: atomicsentence | '(' sentence ')';

UNOP: 'NOT';

BINOP: 'AND' | 'OR' | 'IMPLIES' | 'EQUIVALENT';

SYMBOL: LEXRULE+;

fragment
LEXRULE: ('a'..'z')|('A'..'Z');

关于java - 命题逻辑的 BNF 语法 ANTLR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com