需要帮助解决Scheme Scheme Language的正则表达式问题

时间:2012-03-05 03:47:01

标签: scheme racket

标题很可能与我的意思含糊不清,但我有这个问题要做:

考虑包含变量x,y,z的算术表达式的语法, 和二元运算符+,*如下所示。

<expr>   ->  <term>   { + <term> } 
<term>   -> <factor>  { * <factor> } 
<factor> ->  <var>  |  ( <expr> ) 
<var>  ->  x | y| z  

在Scheme中编写一个名为executer的函数,它接受一个表达式字符串 从上面的语法中导出并输出表达式的值, 假设x,y和z分别为2,4和8。例如,电话

(executer  "((x * x) + y * (z) + y)")

应该生成40.您的实施必须确定非法表达并遵守 优先级为“*”而不是“+”。

现在我一直试图这样做,但我不知道如何解决这个问题。我试图自己解决这个问题,但我选择向你们寻求帮助。

您认为可能有用的文档或其他类似代码的任何链接都会很棒。

提前感谢我为此提供的任何帮助。

1 个答案:

答案 0 :(得分:5)

提示:此问题分为两部分:

  1. 创建一个解析器,该解析器获取列表,解析令牌,将语法树构建为列表。

  2. 创建求值程序,它将解析后的AST并将(表达式)解析为结果。

  3. define-type开始定义您的语法。

    您应该尝试找出如何将2+3转换为(add (2 3)),并将其转换为5

    编辑:

    找到一份旧作业......这是前几行。挑出不相关的东西;)

    (define-type AE
      [num (n number?)]
      [mylist (lhs AE?) (rhs list?)]
      [myhead (n list?)]
      [mytail (n list?)]
      [add (lhs AE?) (rhs AE?)]
      [mult (lhs AE?) (rhs AE?)]
      [myconcat (lhs list?) (rhs list?)])