我写了一个 CYK 解析器,我用它来解析像 (1+2)/3-4^5 这样的数学表达式。我还编写了一个代码,使用下面的语法从 CYK 算法提供的表(左三角矩阵)构建解析树。我的问题是,是否可以直接从我的解析树构建表达式树(哪些内部节点是操作,叶子是数字)?我用来解析的语法(CYK需要乔姆斯基范式)如下:
start symbol: A
A -> [N(,B], B -> [A,N)], A -> [A,C]
C -> [N+,A], C -> [N-,A], C -> [N/,A]
C -> [N*,A], C -> [N^,A], N+ -> +
N- -> - , N/ -> / , N* -> *
N^ -> ^ , N( -> ( , N) -> )
A -> number