gpt4 book ai didi

c# - 讽刺:没有 StartEndSymbol 的 StringLiteral

转载 作者:行者123 更新时间:2023-11-30 22:27:21 30 4
gpt4 key购买 nike

我正在使用 Irony DSL 框架来解析一种语言。该语言允许在不使用引号 (") 的情况下编写字符串,即使它们包含特殊字符,如点 (.) 或减号 (-)。

如果我编辑我得到的文本文件,那么字符串周围有引号,它们可以被很好地解析。但是,我想按原样阅读文件。如何在不设置 StartEndSymbol 的情况下让 Irony 解析字符串?

我使用的是当前版本的 Irony (2012_03_15)。

最佳答案

查看示例 SQL 语法。它允许标识符包含 '.',例如 SELECT a.x FROM table。在这种情况下,“Id”将是一个带有分隔符的列表。

var dot = ToTerm(".");
var dash = ToTerm("-");
var Id_simple = TerminalFactory.CreateSqlExtIdentifier(this, "id_simple"); //covers normal identifiers (abc) and quoted id's ([abc d], "abc d")
Id.Rule = MakePlusRule(Id, dot, Id_simple) | MakePlusRule(Id, dash, Id_simple)

//Covers simple identifiers like abcd, and also quoted versions: [abc d], "abc d".
public static IdentifierTerminal CreateSqlExtIdentifier(Grammar grammar, string name) {
var id = new IdentifierTerminal(name);
StringLiteral term = new StringLiteral(name + "_qouted");
term.AddStartEnd("[", "]", StringOptions.NoEscapes);
term.AddStartEnd("\"", StringOptions.NoEscapes);
term.SetOutputTerminal(grammar, id); //term will be added to NonGrammarTerminals automatically
return id;
}

如果它适用于 SQL,那么它也应该适用于您。

关于c# - 讽刺:没有 StartEndSymbol 的 StringLiteral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11326968/

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