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

Mr.*_*obo 1 scheme racket

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

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

<expr>   ->  <term>   { + <term> } 
<term>   -> <factor>  { * <factor> } 
<factor> ->  <var>  |  ( <expr> ) 
<var>  ->  x | y| z  
Run Code Online (Sandbox Code Playgroud)

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

(executer  "((x * x) + y * (z) + y)")
Run Code Online (Sandbox Code Playgroud)

应该产生40.您的实施必须确定非法表达并遵守"*"优先于"+".

现在我一直在努力做到这一点,但我不知道如何在计划上解决这个问题.我试图自己解决这个问题,但我选择向你们寻求帮助.

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

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

pre*_*lic 5

提示:此问题有两个部分:

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

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

首先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?)])
Run Code Online (Sandbox Code Playgroud)