问题标签 [sprache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 具有自定义字段的语气解析器
我有一个报表服务器,它需要解析一个带有一些参数的字符串,这些参数控制报表中的内容。
我正在使用解析器库语言来帮助解决这个问题。一切都很好,除了我坚持的一件事。
我有一个时间过滤器,它可以是以下值之一:今天、昨天、上周、上个月、无或自定义。
习惯让我有些悲伤。所有其他的只是简单的字符串。Custom 之后还有一个 from 和 to 属性。
自定义行是问题所在。我需要解析“自定义”字符串,然后解析 from 和 to DateTime 字段并将它们传递给 DataFilterEntity.Custom(from, to)
任何想法都非常感谢。
c# - Sprache:语法中的左递归
我正在为类似于 SQL 的语言开发解析器,但我遇到了创建一些语言规则的问题,例如:expression IS NULL
以及expression IN (expression1, expression2, ...)
逻辑和数学运算符之间的优先级。
我上传了一个 GitHub 测试项目https://github.com/anpv/SpracheTest/但是这个变种不好。
我尝试使用以下规则:
它会抛出ParseException
类似ScriptParser.ParseExpression("1 is null")
or的代码ScriptParser.ParseExpression("1 in (1, 2, 3)"): "Parsing failure: Left recursion in the grammar."
。
我如何预测表达式,或者是否存在其他变体来解决这个问题?
c# - Sprache:解析有符号整数
我想知道是否有更好的方法来使用Sprache解析器框架解析有符号整数。
没有符号的整数有众所周知的解析器定义
Parse.Number.Select(int.Parse)
但我也想解析带-
前缀的整数。
我现在得到的是Parse.Regex(@"\-?\d+").Select(int.Parse)
。
有没有更好的方法可以在不使用正则表达式的情况下做到这一点?
例如使用Parse.Char('-').Optional()
然后解析以下数字。
谢谢
c# - 用于忽略字符串中连续引号的正则表达式
我在 Sprache 和 C# 中为使用我无法控制的格式的文件构建了一个解析器。使用它我可以正确转换:
进入
解析器(仅用于引用的文本)当前如下所示:
但是,我正在使用的格式使用“双双”引号转义引号,例如:
尝试解析此内容时,不会返回任何内容。它应该返回:
此外
应该被解析成一个string.Empty
或类似的。
我已经尝试过基于这样的答案的正则表达式不成功,例如,"(?:[^;])*"
或者:
这不起作用(即在上述情况下不返回匹配项)。我认为我的初学者正则表达式技能正在妨碍我。有人有任何提示吗?
编辑:我在这里测试它 - http://regex101.com/r/eJ9aH1
c# - 如何使用 Sprache 构建(XAML)拉解析器?
作为我的OmniXaml项目的一部分,我创建了一个拉式解析器。它读取 XML 文件并将其转换为可枚举的 XAML 节点。但我对结果并不满意,所以我决定尝试以更优雅的方式构建另一个。
这就是我尝试使用Sprache制作解析器的原因。
问题是我什至不知道如何开始。XAML 解析在很大程度上依赖于上下文,因此如果要生成一个 Xaml 节点,则可能必须先行查看并处理以下节点。我目前使用 XmlReader 来读取 XAML。
在这里,我列出了一些输入/输出示例,以便您弄清楚我想要做什么。输入是 XAML 代码,输出是 XAML 节点列表。XAML 节点是一种结构,我在其中保存重新创建 XAML 中表示的对象所需的数据。它们就像 CPU 的指令。
例 1
输入(XAML):
输出(XAML 节点列表)
- “root”的命名空间声明,前缀为:“”
- DummyClass 类型的对象的开始
- 从类型“DummyClass”开始成员“SampleProperty”
- 价值节点: “财产!”
- 会员结束
- 没有任何
- 对象结束
例 2
输入:
输出:
- “root”的命名空间声明,前缀为:“”
- DummyClass 类型的对象的开始
- 没有任何
- 从类型“DummyClass”开始成员“Child”
- “ChildClass”类型的对象的开始
- 没有任何
- 对象结束
- 会员结束
- 对象结束
例 3
输入:
输出:
- “root”的命名空间声明,前缀为:“”
- DummyClass 类型的对象的开始
- 没有任何
- 从“DummyClass”类型开始的成员“项目”</li>
- [获取对象] 指令
- [项目开始] 指令
- “项目”类型的对象的开始</li>
- 没有任何
- 对象结束
- “项目”类型的对象的开始</li>
- 没有任何
- 对象结束
- “项目”类型的对象的开始</li>
- 没有任何
- 对象结束
- 会员结束
- 对象结束
- 会员结束
- 对象结束
问题:如何从这个开始?
你能给我提供一些样本/指南吗?谢谢!
c# - “Sprache”单子解析器`Or`和`Many`语义
我正在使用 Sprache monadic 解析器来解析 DSL。
这是我的语法片段:
如果我然后使用它,Statements.Parse(" ")
我会得到一个异常,说输入意外结束。
Statements
使用运算符时怎么会这样Many
,AFAIK 产生 0-n 结果。
" "
应该返回一个Statements
包含 0 个语句的实例。
那么解析器如何抱怨输入意外结束呢?它不应该只是断定那里没有任何陈述吗?(无论构成语句的不同表达方式有什么时髦的东西)
c# - 如何将 linq 查询转换为方法调用
我正在尝试使用Sprache制作解析器, 我正在使用 F#。我见过的所有关于该库的示例都使用 Linq 查询语法。我尝试使用“查询”计算表达式将 linq 转换为 f#,但我迷路了。
这是我一直在使用的示例。
显而易见的方法是将 linq 转换为方法调用,但我不知道该怎么做。我尝试查看 ILSpy,但这让我有点困惑。
Linq 查询如何看起来像直接方法调用?
c# - Sprache DelimitBy new line
我将这些解析器作为语法的一部分:
我想要一个分隔符解析器,它要么是“至少一个 LineEnd”,要么是一个逗号。
这样我就可以解析以下内容:
或者
我已经尝试了很多不同的选项来定义 NewLineSeparator 但我显然做错了。用逗号分隔工作正常,换行符解析器似乎没有得到任何匹配。
如果有人想偷看,可以在这里找到完整的源代码:https ://github.com/rogeralsing/SpracheHocon/blob/master/SpracheHocon/Program.cs
c# - Sprache - 解析器的组合
使用 Sprache,我有解析器 A、B、C、D,它们与不同的输入部分匹配,并选择(返回)不同的类实例。在我的输入中,有很多部分以随机顺序排列,例如。“abaabccbdbabddba”。我需要选择所有 'a'-s 和 'b'-s 等等 - 顺序无关紧要:
不会这样工作。我如何在 Sprache 中描述这种情况(最好的方式)?