作为序言,我对这类东西的了解是微不足道的。
无论如何,我一直在开发一种上下文无关的语法来描述代数表达式的结构,这样我就可以自学 CYK 解析算法是如何工作的。我了解这种结构如何仅与中缀代数表达式一起使用,但我无法理解如何开发一种可以同时处理“-”运算符的一元和二元定义的语法。
作为参考,这是我在 CNF 中编写的语法(其中 S 是开始符号):
S -> x
A -> OS
S -> LB
B -> SR
S -> KS
O -> +
O -> -
O -> *
O -> /
O -> ^
K -> -
L -> (
R - > )
问题是 CYK 解析算法在遇到“-”运算符时,如何提前知道是否在 S -> KS 和 A -> OS 之间做出决定?这样的语法不再是上下文无关的了吗?最重要的是,由于编程语言可以处理带有二进制和一元减号的语言,我应该如何合理地解析这个?