|
1
4
你的DSL是一种语言 谓词 (他们说某事是真是假) 上下文 (它们根据输入的不同部分进行评估)。 特别是 上下文 由输入和其中的索引组成:
然后,我们可以自上而下地研究语言,检查
含义可以类似地定义,相应的布尔运算与
在您提出的语法中
我们还想先谈谈当前的州。一种方法是转换谓词,在指向前一状态的修改后的上下文中对其进行求值:
在右侧,您还有状态列表,这意味着如果当前状态是其中任何一个,则有一个匹配的谓词:
有了所有这些基本的构建块,我们可以构建更高级的组合子,更接近你想要的语法。
您的示例的相关操作是
最后,我们需要从序列中生成所有相关上下文,以验证整个序列:
这应该足以让事情正常进行,但人们可能会有一个很大的抱怨,那就是所有这些列表查找都很昂贵。将上下文的表示更改为更适合DSL操作的表示将更有效。值得注意的是,我们希望能够查看当前状态以及之前的状态。因此,更好的表示应该更直接地提供这些状态:
你必须更新所有的组合子,但
|
|
|
2
3
考虑反向处理您的列表,并使用
|
|
|
minus one · 空条件和空合并运算符*与*纯布尔表示法 8 年前 |
|
|
zaozaoer · >>java中带负字节值的and>>>运算符 8 年前 |
|
|
Ganesh Thampi · 使用位的奇偶程序 8 年前 |
|
|
FredMan · Rust中的<-符号是什么? 8 年前 |
|
|
user9578589 · Java条件数组 8 年前 |
|
|
Francisco José Letterio · 无法理解指针操作 8 年前 |
|
|
Danny · 如何在r中键入grep中的运算符 8 年前 |
|
|
David Rector · 什么是?=操作员在Swift中做什么? 8 年前 |
|
|
Gian · “/”操作符在Lua中提供什么功能? 8 年前 |