【问题标题】:EBNF or BNF for the LOGO programming language用于 LOGO 编程语言的 EBNF 或 BNF
【发布时间】:2011-10-12 18:24:43
【问题描述】:

有谁知道我在哪里可以获得 LOGO 编程语言的 BNF 或 EBNF?

【问题讨论】:

  • 不确定是谁投票决定关闭此主题。 “编程语言”甚至在标题中......
  • 它似乎已经进入 Reddit,我现在正在保护它(几天后将不受保护)。这不是问题,,只是预防措施。
  • @Tim Post 这进入了 reddit 编程 subreddit,我看不出这是如何引起警报的。甚至可能是吸引新用户的好机会?
  • 离题?玩得好,模组。投票重新开放。
  • 关于 EBNF 和 BNF 题外话的问题如何?!

标签: bnf ebnf logo-lang


【解决方案1】:

BNF 语法在某些情况下可能不太有用...

编写与现有/历史实现准确兼容的 LOGO 并非易事(我曾参与过这样的项目)。问题是解析器没有完成全部工作,而评估器(解释器)必须处理部分数据。考虑这个例子:

proc1 a b proc2 c

根据 proc1 和 proc2 的参数数量,它可能意味着 proc1(a, b, proc2(c)) 或 proc1(a, b, proc2(), c)。

此外,我所知道的 LOGO 解释器,例如 Berkely LOGO,粗略一看似乎不是编写一个传统的解析器,它还可以访问每个过程及其数量;相反,他们运行程序并且程序“吃掉”了他们需要的参数数量。这使得解析器有点幼稚,主要角色是解释器,因此解析有点不寻常。

【讨论】:

  • 那么你是说没有明确的语言语法?
  • 是的,我认为不存在这样的语法(不管是否有歧义),除非它是一种简单的语法,主要按原样解析命令字符串,并且只解析中缀运算符等
  • 对,一个天真的解析器只会根据语法进行解析,但它不会理解内置函数的arity。似乎在解析时,需要先查找函数的 arity,然后再决定如何解析后续标记。正如您所说,“随手解析”也更有意义。
  • "Parse as you go" 是我自己的标志实现Logo Arabic 的方式。我还没有真正研究过 LOGO 的实现场景,而且解析器本身是 ad-hoc,所以我不认为我的工作是最佳实践甚至是好的实践;但该来源可能对您的工作有用。
  • @VivinPaliath,一个特别糟糕的是减号(即-52 中的-)。解析时,您将单词(减号是“单词”)保存在列表中。当你打印一个列表时,除了减号之外,你在单词之间写上空格,因为如果你在减号之后添加一个空格,它就会变成一个差异(即33 -5233 - 52 不同)。对于数字,您可能会立即转换该值。但是,当您编写 -:A 时,这一点非常重要。在这种情况下,你想要 :A 的反面...
【解决方案2】:

没有标准的LOGO实现。

最好的方法可能是查看流行实现的源代码,例如UCBLogo

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2010-11-23
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多