gpt4 book ai didi

c# - 将 EBNF 翻译成 Irony

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:14 24 4
gpt4 key购买 nike

我正在使用 Irony 为脚本语言创建解析器,但我遇到了一个小问题:如何在 Irony 中翻译这样的 EBNF 表达式?

'(' [ Ident { ',' Ident } ] ')'

我已经尝试过一些技巧,比如

Chunk.Rule = (Ident | Ident + "," + Chunk);
CallArgs.Rule = '(' + Chunk + ')' | '(' + ')';

但它很难看,我什至不确定它是否按预期方式工作(还没有尝试过......)。有人有什么建议吗?

编辑:我发现了这些辅助方法(MakeStarList、MakePlusList),但无法找到如何使用它们,因为 Irony 完全缺乏文档……有人知道吗?

最佳答案

// Declare the non-terminals
var Ident = new NonTerminal("Ident");
var IdentList = new NonTerminal("Term");

// Rules
IdentList.Rule = ToTerm("(") + MakePlusRule(IdentList, ",", Ident) + ")";
Ident.Rule = // specify whatever Ident is (I assume you mean an identifier of some kind).

您可以使用 MakePlusRule 辅助方法来定义某个终端的一次或多次出现。 MakePlusRule 基本上只是将您的终端作为标准递归列表惯用语呈现:

Ident |  IdentList + "," + Ident

它还将终端标记为表示一个列表,这将告诉解析器将列表树展开为一个方便的子节点列表。

关于c# - 将 EBNF 翻译成 Irony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101574/

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