我正在为自己的ANTLR语法编写Java代码格式化程序,现在我想对一个特殊规则进行格式化。
我想要的是以某种方式迭代一个解析器规则的所有出现(具体来说是if_stmt
)。我正在使用ANTLR4和Java运行时。
stmt_block
:
EOF
| stmt_list EOF
;
stmt_list
:
stmt
| stmt_list stmt
;
stmt
:
if_stmt
| RETURN SEMICOLON NEWLINE?
;
if_stmt
:
IF BRACKET_OPEN expr BRACKET_CLOSED CBRACKET_OPEN stmt_list CBRACKET_CLOSED
;
expr
:
TRUE
;
private String formatCode(String input)
{
// Parse the input
MyLexer lex = new MyLexer(new CaseChangingCharStream(
CharStreams.fromString(input), true));
CommonTokenStream tokens = new CommonTokenStream(lex);
tokens.fill();
MyParser pars = new MyParser(tokens);
Stmt_blockContext stmt_blockContext = pars.stmt_block();
stmt_blockContext.children.forEach(parseTree->{
//Iterate over the parseTree to get all if_stmtContext's and modify them
});
// Then return the modified contexts text
return stmt_blockContext.getText();
}
任何帮助都很感激!
不能只使用解析器进行任何格式化任务,除非您希望它能够只处理有效的输入。格式化主要是重写空白空间,lexer更适合于此。有关如何实现代码格式化程序的示例,请参见我的用于Visual Studio代码的ANTLR4插件。这是针对ANTLR4语法的,但同样的原则也适用于任何其他编程语言。
问题内容: 我的.NET应用程序在运行时评估用户定义的规则。这些规则由用户通过GUI菜单输入到系统中。我生成一个与其对应的逻辑语句,并将其存储在数据库中。 例如:(名称=’John’AND姓氏=’Smith’)或数字> 12 但是,当用户想要通过GUI编辑规则时,我需要进行反向操作来从存储的规则中确定菜单状态,这既昂贵又复杂。您如何建议以一种可以轻松地反转到菜单状态的方式存储规则? 问题答案: 您
我正在使用TopBraid免费版创建具有SPIN规则的OWL本体。我正在加载本体论和SPIN规则到芝麻OpenRDF工作台: 我创建了一个简单的测试本体。它有一个类,具有一个旋转规则和一个数据类型属性。 SPIN规则将时间戳添加到我的测试类的测试实例中。以下是整个测试本体的RDF,包括我的类、数据类型属性和规则(简称): 因此,清除我在芝麻中的SPIN存储库,并使用工作台的修改/添加命令(未选中“
CloudGate解析规则可以直接导入使用,不需要任何额外的操作,非常方便! 规则列表 规则名称 下载地址 Surge https://async.be/Rule/Basic/Hosts Shadowrocket https://async.be/Rule/Basic/Hosts 解析规则 简要概述:通过实时同步Hosts信息源达到自动更新,同时使用解析模板进行生成。 无需任何其他操作,导入即可使
template.defaults.rules art-template 可以自定义模板解析规则,默认配置了原始语法与标准语法。 修改界定符 // 原始语法的界定符规则 template.defaults.rules[0].test = /<%(#?)((?:==|=#|[=-])?)[ \t]*([\w\W]*?)[ \t]*(-?)%>/; // 标准语法的界定符规则 template.def
我正在开始一个项目,流口水和口水guvnor。 我的规则部署在drools Guvnor中。我的规则引擎实例可以通过drools Guvnor公开的pkg文件访问这些规则,当您进行包发布、构建和发布时。 这一切都很好,我正在寻找的是在运行时禁用规则的解决方案。 我现在唯一的解决方案是去guvnor,归档规则,并对包含该规则的包进行构建+发布。 不是还有别的策略吗?
问题内容: 我有这张桌子: 如何为每个名称获得年份第二高的行,如下所示: 我尝试了以下查询,但没有成功: 上一个查询给了我这个错误:“ SQL错误(1235):此版本的MySQL尚不支持’LIMIT&IN / ALL / ANY / SOME子查询’” 而且我现在无法更改MySQL版本(5.6.25),因为该解决方案已经投入生产。 有什么帮助吗? 问题答案: 在MySQL中,每个组求解n的一种方法