【问题标题】:Need help tackling a Regular Expressions problems on Scheme Programming Language需要帮助解决有关 Scheme 编程语言的正则表达式问题
【发布时间】:2012-03-05 03:47:01
【问题描述】:

标题很可能与我的真正意思模棱两可,但我有这个问题要做:

考虑包含变量 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。您的实施必须确定非法表达并符合要求 “*”优先于“+”。

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

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

提前感谢您为此获得的任何帮助。

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

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

    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?)])
    

    【讨论】:

    • 我会试一试。我不太擅长方案,所以让我们看看情况如何。
    • @JesusAdoboLuzon - 这就是学习的目的,我的朋友!当你让它工作时,你会感觉很好。我认为这是一个非常有益的项目,我在学校期间自己也做过!
    • 谢谢伙计。使用这样一种不同的语言工作有点奇怪,我的大脑就是不太好。让我们看看我能不能掌握这个。谢谢!
    • @JesusAdoboLuzon - 相信我,这对大多数人来说很难掌握。这是一种完全不同的思维方式。这是一种你一直在诅咒它的课程,最后你会“哇,这真的很有用”。继续用你的代码更新你的问题,我会继续帮助你。也不会讨厌复选标记;)
    • 这是做什么的? (define vars (make-hash))
    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多