gpt4 book ai didi

ANTLR树语法和StringTemplate代码翻译

转载 作者:行者123 更新时间:2023-12-02 13:14:27 27 4
gpt4 key购买 nike

我正在开发一个代码翻译项目,其示例 ANTLR 树语法如下:

start:               ^(PROGRAM declaration+) -> program_decl_tmpl();
declaration: class_decl | interface_decl;
class_decl: ^(CLASS ^(ID CLASS_IDENTIFIER))
-> class_decl_tmpl(cid={$CLASS_IDENTIFIER.text});

它的组模板文件如下所示:

group My;

program_decl_tmpl() ::= <<
*WHAT?*
>>

class_decl_tmpl(cid) ::= <<
public class <cid> {}
>>

基于此,我有以下问题:

  • 除了我应该用什么?来表达程序只是一个类声明列表以获得最终生成的输出之外,一切都正常?
  • 这种方法平均适合不太高级的语言吗?
  • 我也学过ANTLR Code Translation with String Templates ,但这种方法似乎充分利用了树语法中交错代码的优势。是否也可以在字符串模板中尽可能地做到这一点?

解决方案,我根据 Terence 的建议添加了解决方案:

start:             ^(PROGRAM d+=declaration+) -> program_decl_tmpl(decls={$d});
declaration: cd = class_decl -> decl_tmpl(decl={$cd.st})
| id = interface_decl -> decl_tmpl(decl={$id.st});
class_decl: ^(CLASS ^(ID CLASS_IDENTIFIER))
-> class_decl_tmpl(cid={$CLASS_IDENTIFIER.text});

模板将是:

group My;

program_decl_tmpl(decls) ::= <<
<decls>
>>

decl_tmpl(decl) ::= <<
<decl>
>>

class_decl_tmpl(cid) ::= <<
public class <cid> {}
>>

最佳答案

尝试

start: ^(PROGRAM d+=declaration+) -> program_decl_tmpl(decls=$d)

WHAT? = <decls>

关于ANTLR树语法和StringTemplate代码翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498933/

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