问题标签 [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.

0 投票
1 回答
1906 浏览

c# - 具有自定义字段的语气解析器

我有一个报表服务器,它需要解析一个带有一些参数的字符串,这些参数控制报表中的内容。

我正在使用解析器库语言来帮助解决这个问题。一切都很好,除了我坚持的一件事。

我有一个时间过滤器,它可以是以下值之一:今天、昨天、上周、上个月、无或自定义。

习惯让我有些悲伤。所有其他的只是简单的字符串。Custom 之后还有一个 from 和 to 属性。

自定义行是问题所在。我需要解析“自定义”字符串,然后解析 from 和 to DateTime 字段并将它们传递给 DataFilterEntity.Custom(from, to)

任何想法都非常感谢。

0 投票
1 回答
738 浏览

c# - Sprache:如何从数字匹配中排除字母?

使用单子解析器Sprache,寻找匹配数字字符(0..9),不包括非数字字符,但前导或尾随空格是可以的。

我认为这应该工作:

或这个:

两者都适用于我能想到的所有情况,除了尾随文本:

有什么线索吗?

0 投票
1 回答
2019 浏览

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."

我如何预测表达式,或者是否存在其他变体来解决这个问题?

0 投票
1 回答
1559 浏览

c# - Sprache:解析有符号整数

我想知道是否有更好的方法来使用Sprache解析器框架解析有符号整数。

没有符号的整数有众所周知的解析器定义 Parse.Number.Select(int.Parse)

但我也想解析带-前缀的整数。

我现在得到的是Parse.Regex(@"\-?\d+").Select(int.Parse)

有没有更好的方法可以在不使用正则表达式的情况下做到这一点?

例如使用Parse.Char('-').Optional()然后解析以下数字。

谢谢

0 投票
4 回答
1801 浏览

c# - 用于忽略字符串中连续引号的正则表达式

我在 Sprache 和 C# 中为使用我无法控制的格式的文件构建了一个解析器。使用它我可以正确转换:

进入

解析器(仅用于引用的文本)当前如下所示:

但是,我正在使用的格式使用“双双”引号转义引号,例如:

尝试解析此内容时,不会返回任何内容。它应该返回:

此外

应该被解析成一个string.Empty或类似的。

我已经尝试过基于这样的答案的正则表达式不成功,例如"(?:[^;])*"或者:

这不起作用(即在上述情况下不返回匹配项)。我认为我的初学者正则表达式技能正在妨碍我。有人有任何提示吗?

编辑:我在这里测试它 - http://regex101.com/r/eJ9aH1

0 投票
0 回答
146 浏览

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>
  • 没有任何
  • 对象结束
  • 会员结束
  • 对象结束
  • 会员结束
  • 对象结束

问题:如何从这个开始?

你能给我提供一些样本/指南吗?谢谢!

0 投票
0 回答
1163 浏览

c# - “Sprache”单子解析器`Or`和`Many`语义

我正在使用 Sprache monadic 解析器来解析 DSL。

这是我的语法片段:

如果我然后使用它,Statements.Parse(" ")我会得到一个异常,说输入意外结束。

Statements使用运算符时怎么会这样Many,AFAIK 产生 0-n 结果。

" "应该返回一个Statements包含 0 个语句的实例。

那么解析器如何抱怨输入意外结束呢?它不应该只是断定那里没有任何陈述吗?(无论构成语句的不同表达方式有什么时髦的东西)

0 投票
1 回答
385 浏览

c# - 如何将 linq 查询转换为方法调用

我正在尝试使用Sprache制作解析器, 我正在使用 F#。我见过的所有关于该库的示例都使用 Linq 查询语法。我尝试使用“查询”计算表达式将 linq 转换为 f#,但我迷路了。

这是我一直在使用的示例。

显而易见的方法是将 linq 转换为方法调用,但我不知道该怎么做。我尝试查看 ILSpy,但这让我有点困惑。

Linq 查询如何看起来像直接方法调用?

0 投票
1 回答
929 浏览

c# - Sprache DelimitBy new line

我将这些解析器作为语法的一部分:

我想要一个分隔符解析器,它要么是“至少一个 LineEnd”,要么是一个逗号。

这样我就可以解析以下内容:

或者

我已经尝试了很多不同的选项来定义 NewLineSeparator 但我显然做错了。用逗号分隔工作正常,换行符解析器似乎没有得到任何匹配。

如果有人想偷看,可以在这里找到完整的源代码:https ://github.com/rogeralsing/SpracheHocon/blob/master/SpracheHocon/Program.cs

0 投票
1 回答
280 浏览

c# - Sprache - 解析器的组合

使用 Sprache,我有解析器 A、B、C、D,它们与不同的输入部分匹配,并选择(返回)不同的类实例。在我的输入中,有很多部分以随机顺序排列,例如。“abaabccbdbabddba”。我需要选择所有 'a'-s 和 'b'-s 等等 - 顺序无关紧要:

不会这样工作。我如何在 Sprache 中描述这种情况(最好的方式)?