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

compiler-construction - 将链式表达式建模为 AST

前言

我第一次尝试编写解释器/编译器。标记化和解析已经是一件事,我似乎已经想通了。我仍然发现自己在苦苦挣扎,因为有些语言结构很难建模。请查看我尝试转换为abstract syntax tree.

带下划线的表达式建模AST为:


问题:

A. chained 应该Expressions被建模为一个数组,它们应该相互嵌套吗?后期评估和遍历最实用的模型是什么?

B.在 中func assignToChainedExpressions,将值分配给链是否有意义,其中第一个Expression是 a ClassInstantiation?我想,instance它本身会在运行时被丢弃。

C.大多数示例使用非常简单的模型进行Assignment操作。看:

如果操作的左侧也是 an,应该如何对更复杂的赋值建模Expression


编辑1:

像这样建模是否是个好主意assignFromChainedExpressions

像这样建模是否是个好主意assignToChainedExpressions

0 投票
1 回答
380 浏览

c# - 在找到分隔符或使用 Sprache 到达输入结尾之前,我该如何解析?

我正在尝试解析一个字符串,其中包含散布着星星的文本:

var input = "*This is the first part*This is the second part";

我想提取星之间的任何文本和最后一个星之后的文本。该字符串不以星号或换行符结尾。

我用 Sprache 编写了一个解析器来尝试实现这一点:

result最终只有一个元素,而不是两个。我认为这是因为rest一直解析到输入的末尾。

如何告诉解析器解析直到星号输入结束?任何帮助将非常感激!谢谢

0 投票
3 回答
177 浏览

c# - 如何使用 Sprache 解析可以以任何顺序出现的行?

我正在使用 Sprache 解析文件的一部分,如下所示:

所有三行都是强制性的,但它们可以以任何顺序出现。我有各个行的解析器,如下所示:

我将它们结合起来解析整个部分,如下所示:

但这仅在线条以 OneThing、AnotherThing、YetAnotherThing 的顺序出现时才有效。如何更改此设置以允许行以任何顺序出现但仍强制每行应出现一次?

非常感谢任何帮助!谢谢

0 投票
1 回答
99 浏览

c# - Sprache 如何处理多行延续值

我正在使用 Sprache 解析旧文件。

该文件具有以下结构,非常类似于键和值字典:

我能够正确处理文件,但不能在它有“\”行继续时。

我所做的唯一肮脏的黑客攻击是替换作为输入发送到解析器的字符串并替换字符,因此没有行继续:

我不想承担这个技术债务...

无论如何指示解析器忽略模式“\”和“\r\n”并替换为空字符串?

我已经尝试过 except (with Or)、Return 和 Then ,但都没有成功。

这是我正在使用的解析器的一部分。以下仅用于“价值”部分:

0 投票
1 回答
58 浏览

c# - 如何忽略除匹配项之外的所有内容?

我有一些源代码文件,我想在其中提取所有注释(C 风格)并在它们中搜索特定的构造,然后我可以在源生成器中使用它来制作一些额外的代码......

例子:

我有2个问题。首先,我不知道如何跳过除评论之外的所有内容,其次如何让它只返回其中编码的记录?或者,只需搜索关键字并尝试从那里解析,但也无法弄清楚。