1
我给出了一种上下文无关语法,它定义了给定情况下有效的算术表达式的含义。问题在于把它写在haskell和Prolog中。这是CFG。Prolog中的算术表达式
Expr ::= lit(i)
| add(Expr, Expr)
| sub(Expr, Expr)
在Haskell中它相当简单。我只是使用数据类型,将其称为Expr,然后离开我。这是我写的:
data Expr = Lit Integer |
Add Expr Expr |
Sub Expr Expr
但我相当坚持写在Prolog。此外,运行expr(E)(其中E是一个算术表达式),如果它确实是一个由CFG定义有效的表达式,则它应计算为true。到目前为止,我写了这个,但我不认为这是正确的。所以帮我弄清楚。
expr(lit(i), i).
expr(add(expr(), expr()), Res).
expr(sub(expr(), expr()), Res).
这是** **不是一个CFG!终端符号在哪里? – false 2014-12-03 10:26:42
让我们假设它是一个非正式的,象征性的CFG,如果它很重要的话。 – 2014-12-03 10:28:58
终端符号喊我点燃(i)。 – 2014-12-03 10:31:18