作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我正在使用 Irony DSL 框架来解析一种语言。该语言允许在不使用引号 (") 的情况下编写字符串,即使它们包含特殊字符,如点 (.) 或减号 (-)。 如果我编辑我得到的文本文件,那么字符串周围
我是一名优秀的程序员,十分优秀!