问题标签 [superpower]

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 回答
1938 浏览

c# - 使用 Superpower 解析简单的文本语法

我正在尝试使用Superpower创建一个解析器。我已经查看了我在 repo 中找到的示例,但它们有点难以理解,至少对于像我这样的初学者来说:) 所以我带着这个小挑战来了。

我发明了一个非常基本的语法来学习。我想到了一种电梯,它遵循一系列指令来上升、下降和等待。

例子:

如您所见,它由逗号分隔的要移动的动词列表组成,例如电梯。

  • 动词是UPDOWNWAIT
  • 每个动词都用括号括起来:(
  • UPDOWN需要一个绝对数或一个相对数,表示电梯应该移动到的楼层。相对楼层数字在数字前带有 @。
  • WAIT不接受任何号码,因为它会暂时停止电梯。

我真的很想学习如何为这个语法创建一个基于标记的解析器作为开始,以便了解如何使用 SuperPower。

0 投票
0 回答
334 浏览

c# - Superpower解析分隔的字符串列表

我在解析字符串列表时遇到问题:

这被标记为:

我的解析器看起来像:

结果是:语法错误(第 1 行,第 33 列):意外的逗号 ',',预期的 rparen

有什么线索吗?

0 投票
1 回答
130 浏览

c# - 从 SuperPower 中的关键字获取字符串

我正在为一个工作项目开发一种简单的脚本语言,我需要创建一个表单的定义语句type name = value。我一直在关注SuperpowerSimpleSql 示例并创建了标记器,它正确地标记了输入。

问题来自为赋值语句创建 TokenListParser。目前解析器被定义为:

并且ShmemWord是一个带有构造函数签名的简单类ShmemWord(string name, ulong value)

到目前为止,我是否正确定义了这个,如何将名称转换为字符串?

0 投票
1 回答
1135 浏览

c# - 平衡嵌套括号的超级解析器

我正在努力为下面的部分输入集(带有“|”分隔符的嵌套平衡括号)想出一个超级强大的解析器。

任意文本可以放在括号内,包括空格、其他标记和“()”。只有 '|'、'('、')' 在这里应该有特殊含义(换行符也会结束序列)。为了有效,每个平衡的、带括号的组必须有一个“|” 并且至少有一个字符不是 '(' 或 ')'。

理想情况下,解析器会将每个输入拆分为一个列表,其元素可以是(终端)字符串或字符串数​​组,如下所示:

有效的:

无效/忽略:

我的代币(出于此处的目的)如下:

0 投票
3 回答
612 浏览

c# - Superpower:仅当字符串开始一行时才将字符串与解析器匹配

超能力解析时,如何只匹配一行中的第一个字符串?

例如,我需要匹配 "A: Hello Goodbye\n" 中的 A 冒号,而不是 "Goodbye A: Hello\n" 中的冒号

0 投票
1 回答
460 浏览

c# - Superpower:仅当字符串开始一行时才将字符串与标记器匹配

在超级大国中进行标记时,只有当它是一行中的第一件事时,如何匹配一个字符串(注意:这是一个与这个不同的问题)?

例如,假设我的语言只有以下 4 个字符(''、':'、'X'、'Y'),每个字符都是一个标记。还有一个 'Header' 标记来捕获以下正则表达式模式 /^[XY]+:/ 的情况(任意数量的 Xs 和 Ys 后跟冒号,仅当它们开始行时)。

这是一个快速测试类(第 4 个测试用例失败):

0 投票
0 回答
107 浏览

parsing - 一元运算符树

我想解析表达式

  • 一个
  • ++一个
  • 一个++
  • ++一个++
  • ++一个++++

前自增运算符优先于后自增运算符。

我拥有的解析器是:

但是,当我使用解析器解析像“a++”这样的简单表达式时Expression,测试会挂起。我想这是由于递归问题。

但是问题是什么以及如何解决呢?

0 投票
1 回答
513 浏览

c# - 对象树嵌套字符串表示的超级解析器

我正在努力理解递归解析在 Superpower 中的工作原理。我研究了github上的博客文章和示例,但仍然不明白。

有人可以告诉我,从我写的 Tokenizer 中,我可以如何使用建议的结构化(见下文)重建 AST 吗?

这是我的目标:

我正在使用 Kuka 机器人。通过 tcp 客户端,我可以读取机器人控制器上变量的内容。变量的内容作为单个字符串返回给我。我想解析这个字符串并填充一个适应机器人语言的自定义 AST。

库卡机器人语言(KRL):

在机器人语言中,我有以下原始类型:BOOL, INT, CHAR, REAL

我也有能力创建自定义枚举。枚举的值以 '#' 开头:ENUM

字符串表示为 CHAR 数组:CHAR[]

此外,还可以创建称为 STRUC 的复合结构。结构聚合字段值数据(可以是 BOOL、INT、CHAR、STRING、REAL、ENUM 或 STRUC):STRUC

要解析的数据样本:

这是我要解析的数据的典型示例,当我向机器人询问作为progLogDb[1]的第一项的变量时progLogDb,机器人程序日志数组,其中每个项目都是一个PROLOGstruc :

在这个示例中,您可以看到 struc 是如何嵌套的。一个 struc 写道:{Type: key-value, key-value, ...}值是其中之一BOOL, INT, REAL, ENUM, STRING, STRUC。如果该值是原始数据类型,则必须在解析过程中推断出该类型。

这是我要构建的树:

代币化

到目前为止,我已经使用以下代码成功完成了标记化部分(我相信):

其中,对于示例,它给了我以下标记:

解析成 AST

所以现在我的标记化看起来不错,我想将标记解析为自定义 AST,即关联字段-值对、推断原始类型并重新创建正确的 struc 嵌套。对此部分的任何帮助将不胜感激。

0 投票
1 回答
751 浏览

java - C#/Java 中是否有任何 GLL 解析器组合库?

我对解析器组合器非常感兴趣,尤其是那些能够处理左递归和歧义语法的组合器。我知道Nicholas Blumhardt的神话般的Superpower,但它无法处理这种语法。

我发现了一些像https://github.com/djspiewak/gll-combinators这样的 GLL 解析器组合库,但它使用 Scala,这对我来说是一个很大的不便(我不知道那种语言)。

我想知道C#(或Java)中是否有这些

非常感谢。

0 投票
2 回答
265 浏览

c# - Superpower:匹配除分词器之外的任何非白色字符

我想使用该NugetSuperpower来匹配所有非白色字符,除非它是一个标记化的值。例如,

应该导致:

但我现在拥有的是:

它的解析器如下所示:

当然,我在解析器的另一个变量中返回字符串。但这只是简化了。

希望这是足够的信息。如果没有,我确实在 Github 上有了整个 repo。https://github.com/jon49/FlowSharpHtml