您如何理解这个Compiler / Grammar作业问题?

时间:2009-11-05 19:44:18

标签: compiler-construction computer-science

我正在编写我的编译器作业,我有以下问题:

考虑以下语法:

  

lexp - > 数字 :( op lexp-seq)
  op - > + | - | *
  lexp-seq - > lexp-seq lexp | lexp

这个语法可以被认为是表示LISP = like前缀形式的简单整数算术表达式。例如,将写出表达式34-3 * 42( - 34(* 3 42))。

应该对法律用语( - 2 3 4)和( - 2)作出什么解释?表达式(+ 2)和( 2)怎么样?*


现在,我不确定他们的意思是“代表什么应该是什么”。例如,他们想要推导吗?

第一个似乎很简单:
( - 2 3 4)
( - 1 4)
( - 3)

我认为一元( - 2)和(+ 2)会被解释为消极和显性正面吗?

我不知道(* 2)会被解释为什么?

推导起作用并且很容易:

  

lexp - > (op lexp-seq)
        - > (* lexp-seq)
        - > (* lexp)
        - > (*号码)

但这是他们所要求的吗?或者它是在问我如何解释(* 2)在语义上意味着什么?

请帮我解读我模糊的作业问题!

1 个答案:

答案 0 :(得分:1)

在方案中(我也认为在lisp中)语言(* ....)意味着“将所有表达式乘以大括号”,因此(* 2)意味着简单2 并且( - 2 3 4)表示“2 - 3 - 4”,其为-5