我正在分析代码,我看到了这个
[(exp + exp) (+ $1 $3)]
现在我想知道这是做什么的?是否需要该列表的第一个和第三个元素?那个设置在左侧甚至被认为是一个列表?我正在学习这门语言,但我已经度过了非常艰难的时光,所以你们一直都是最好的帮助。谢谢!
答案 0 :(得分:7)
鉴于您之前的问题,我猜这是在Racket的解析器工具库的上下文中。来自docs:
(grammar (non-terminal-id
((grammar-id ...) maybe-prec expr)
...)
...)
声明要解析的语法。每个
grammar-id
都可以是token-id
来自令牌声明中命名的group-id
,或者它可以是 语法声明中声明的非终结者id。可选prec
声明适用于precs
声明。expr
是一个“语义” 动作,“当发现输入与其匹配时评估 相应的生产。每个操作都是与其解析器具有相同范围的Racket代码 定义,除了变量
$1
,...,$i
被绑定,其中i 是相应生产中的语法ID数。每个$k
被绑定到第k个语法符号的动作结果 生产权,如果该语法符号是非终端,或 如果语法符号是终端,则存储在令牌中的值。