问题标签 [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 投票
2 回答
677 浏览

c# - 使用 Sprache 从标识符中解析枚举?

我开始使用 Sprache 为数学表达式解析特定领域的语言。我知道我可以使用以下方式解析标识符:

由此我想构建一个解析器,只有在标识符标记是枚举的文本值之一时才会成功。假设我有一个名为 Dimension 的枚举,其值为 Dimension.Location 和 Dimension.Time。我要实现

只有当被解析的是一个标识符并且标识符的令牌字符串是枚举名称之一(“Location”或“Time”),并且它分别返回枚举值 Dimension.Location 或 Dimension.Time 时才会成功. 有人可以帮助解决可能是一个简单的问题吗?谢谢!

0 投票
2 回答
1843 浏览

c# - 语气解析器和字符转义

我还没有找到一个例子 - 如何处理字符转义。我找到了一个代码示例:

如果文本不包含转义,它会成功解析文本,但不会解析带有转义字符的文本。

0 投票
1 回答
1355 浏览

c# - 当表达式的开头相同时,如何使用 Sprache 解析表达式

我在使用基于 Sprache 的解析器时遇到了一些问题。我正在尝试解析一个字符串,其中有两种可能的东西要解析。一种选择是常规变量名称,例如x或更复杂的版本x[1]。第一个引用一个简单的变量,第二个是由许多变量组成的聚合变量,x[1]引用聚合中的第一个变量。

这就是我到目前为止所拥有的。

我在某处读到该Or方法仅在第一个字符决定哪个表达式获胜时才有效。在我的情况下,情况并非如此。两者都以变量名开头。做什么XOr?在这种情况下会有所帮助吗?

我得到以下异常::Sprache.ParseException解析失败:意外'['; 预期 = 或 != 或 >= 或 <= 或 > 或 <(第 1 行,第 3 列);最近消费:xx

0 投票
1 回答
744 浏览

c# - “Sprache”解析器`Present`语义

我正在编写一个符合跨域身份管理系统的解析器:协议过滤规范。除了“pr”运算符,我几乎可以用 Sprache 解析任何表达式。无法理解如何使其正常工作。

这是主要的解析内容:

这是我添加“pr”解析的地方:

此过滤器失败:title pr and addresses[type eq \"work\"].streetAddress eq \"workStreet\"
这没关系:

也许有人可以帮我解决这个问题。

编辑:也许我应该在某个时候将运算符与 XChainRightOperator 链接起来,因为 pr title 工作正常。但链扩展适用于二进制表达式,我需要一元。

0 投票
1 回答
601 浏览

c# - 如何改进缺少右括号的 Sprache 解析器错误消息?

我正在使用 Sprache 构建一个简单的命令式语法。我正在尝试找出在缺少结束字符(例如 ]、)、} 时是否有更好的错误报告方法。

如果缺少结束字符,我的语法会正确报告错误。但是,消息传递导致难以理解真正的问题。给定以下要解析的字符串:

sum 10 [multiply 5 4

Sprache 报告以下错误:

Sprache.ParseException : Parsing failure: unexpected '['; expected newline or end of input (Line 1, Column 8); recently consumed: sum 10

似乎正在发生的事情是解析器试图匹配 myCommandSubstitution并且未能找到关闭的']'. 这会导致解析器回退并尝试备用。由于它无法再匹配Things该命令,它会尝试匹配CommandTerminator. 由于无法匹配,'['它会报告错误,抱怨预期的错误,newline或者end of input不会说:“嘿,伙计,你的支架不匹配!”

是否有任何解决方法或建议如何改进语法以使用像 Sprache 这样的解析库更好地报告?

0 投票
2 回答
882 浏览

c# - 将列表聚合到字典中

我正在尝试创建一个Sprache解析器,其中应将部分输入解析为字典

and=a;list=of;arbitrary=key;value=pairs部分应该以 Dictionary<string,string> 结尾。
为此我有

和扩展方法

(从示例中复制)

然后我尝试了

现在我被困在如何做类似的事情上

或类似的东西。
我如何将任意 key=value[;] 对解析为字典?

0 投票
1 回答
364 浏览

c# - 在 C# 中使用 Sprache 解析带有“xxx = { .. }”的文本

你可能已经猜到了,我需要一些帮助。我目前正在和朋友一起开发 WPF,但我们遇到了一个问题:我们需要解析某种类型的文本,但我们不知道该怎么做。我们找到了 Sprache,它似乎是一个很棒的解析器,但我们不知道如何使用它。另外:英语不是我们的母语,所以介绍文章对我们来说不是很容易理解。

所以我们决定在 Stackoverflow 上询问它。

我们要解析的文本位于一个简单的 .txt 文件中,如下所示:

(它来自一个名为“钢铁之心IV”的游戏,只是整个事情的一小部分)

你们能给我们一点帮助或一点提示吗?

在此先感谢,

0 投票
1 回答
327 浏览

parsing - 如何使用解析器组合器处理“行继续”

我正在尝试使用Sprache解析器组合库编写一个小型解析器。解析器应该能够解析以一个\无关紧要的空白结尾的行。

问题

如何创建一个解析器来解析=可能包含行继续符的符号之后的值\?例如

应该被解析为(KeyValuePair (Key, 'a'), (Value, 'b\e, c, d')).

我一般不熟悉使用这个库和解析器组合器。因此,非常感谢任何朝着正确方向的指针。

我试过的

测试

生产

尝试一 测试输出 尝试二 测试输出
0 投票
1 回答
666 浏览

sprache - 使用 Sprache 解析文件时出现异常“解析失败:到达输入的意外结束;预期 =

我想解析下面的文件,

我把语法写成,

我得到了例外

解析失败:到达输入的意外结束;预期 =(第 13 行,第 2 列);最近消费:矿石 } }

任何线索都会有所帮助。

0 投票
0 回答
70 浏览

sprache - Sprache 作为往返工具

Sprache可以用作往返工具吗?我知道有了它,我可以构建一个可以从给定文本中提取信息的解析器。但是我可以重复使用相同的(简单*)模式来解析,也可以从信息中生成文本?

让我举个例子:我实现了一个能够"abc"从文本中提取信息的解析器"[abc]"。现在,如果我可以简单地提供值"abc"并且它会知道如何生成结果文本,那将会很方便"[abc]"。因此,我将有一个往返工具来从文本到信息并返回到文本。

*) 限于已知的符号出现次数(即没有.AtLeastOnce()等)