【发布时间】:2018-04-20 01:49:51
【问题描述】:
我正在使用 Prolog DCG 为简单的编程语言组合一个词法分析器/解析器,它使用 DCG 参数构建令牌/语法树列表,例如
symbol(semicolon) --> ";".
symbol(if) --> "if".
然后使用 DCG 规则的这些参数构建语法树。
但是,我遇到了一个问题,当它解析变量和数字(这种语言中只有整数)时,我需要 DCG 参数更加动态,例如
symbol(number(X)) --> X, {integer(N)}.
本质上,我需要 DCG 参数本质上是从它实际解析的内容中生成的。有没有办法做到这一点?如果没有,有什么好的解决方法?
编辑:作为一个具体的例子,我有规则
symbol(num(N)) --> {number_codes(N,C)}, C.
查询phrase(symbol(num(N)),"7").时我需要输出N=7
【问题讨论】:
-
绝对有可能;你见过dcg/basics吗? (另外,它的源代码is pretty instructive too。)
-
你已经接近了。
symbol(number(X)) --> [X], {integer(X)}.虽然你要小心,因为number/1是一个标准的 Prolog 谓词。也许选择别的东西。 -
我不太确定;我目前面临的具体例子是:
symbol(num(N)) --> {number_codes(N,C)}, C。输入 `phrase(symbol(num(N)),"7") 时,我基本上需要输出N=7。
标签: parsing prolog lexical-analysis dcg