你怎么称呼这个以及如何阅读这个? (解析方案)

时间:2014-09-13 19:32:49

标签: parsing scheme

目前,我正在学习如何在Java中解析Scheme。这是基本列表(我不知道它的正式名称是什么)编辑:语法!

exp -> ( rest
     | #f
     | #t
     | ' exp
     | integer_constant
     | string_constant
     | identifier

rest -> )
     | exp+ [ . exp ] )

我的问题是:这个列表叫什么,就像它的正式名称一样? "解析列表"?编辑:根据评论,它被称为语法。

如何阅读?我的猜测是表达式介于左括号和右括号之间,例如:( exp )

此外,我猜行exp -> ( restrest ->)#f#t' expinteger_constant,{之间的任何对象{1}},string_constant代替上一个示例示例中的表达式。例如:identifier

列表中的最后一项是( #t ),我想这是第一个右括号右边的另一个表达式,例如上一个例子:| exp+ [ . exp] )

最后,这个位((#t) exp),支架只是说它是可选的?

如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

这称为语法。写下语法有很多不同的语法,但它们彼此非常相似。

此处->可以被理解为“是”,|被视为“或”,+被视为一个或多个,[],如您所怀疑的那样,“可选”。这里使用的其他符号仅代表它们自己。所以这个语法可以这样读:

  1. 表达式为:

    • 开头括号后跟“休息”(见2)
    • OR哈希标记后跟字母f
    • OR哈希标记后跟字母t
    • 或单引号后跟表达式
    • OR整数常量(如123
    • OR字符串常量(如"foo"
    • 或标识符(如foo
  2. “休息”是:

    • 结束括号
    • OR一个或多个表达式,可选地后跟一个点和另一个表达式,后跟一个右括号
  3. 所以foo是一个表达式(因为标识符是表达式),()是一个表达式(因为)是“rest”而( rest是表达式,{ {1}}是一个表达式(因为(foo)是表达式,foo是“休息”而exp )是表达式),依此类推。