【问题标题】:Provide syntax-rule Racket提供语法规则球拍
【发布时间】:2018-07-04 16:34:00
【问题描述】:

如何在球拍中提供语法规则?

我有类似这样的代码:

(define-syntax SELECT 
  (syntax-rules (FROM WHERE star)
    [(SELECT colnames FROM relnames)
     ...]
    [(SELECT colnames FROM relnames WHERE . expression)
     ...]))

如何使用提供语句来提供 FROM WHERE 和星标?

这就是我提供 SELECT 的方式:

(provide SELECT)

【问题讨论】:

    标签: racket define-syntax syntax-rules


    【解决方案1】:

    这是一种方法。首先定义字面量(如果在 SELECT 之外使用,则给出一个很好的错误消息),然后提供它们。

    #lang racket
    (provide SELECT FROM WHERE)
    
    (define-syntax FROM  (λ (stx) (raise-syntax-error 'FROM  "literal FROM used outside SELECT"  stx)))
    (define-syntax WHERE (λ (stx) (raise-syntax-error 'WHERE "literal WHERE used outside SELECT" stx)))
    
    (define-syntax SELECT 
      (syntax-rules (FROM WHERE star)
        [(SELECT colnames FROM relnames)                    ...]
        [(SELECT colnames FROM relnames WHERE . expression) ...]))
    

    【讨论】:

    • 我不确定这是否正确。似乎 OP 只是想提供一些标识符以被识别为文字。
    • 谢谢。我真的很喜欢您在编辑之前提供的链接,它解释了一些事情,即使它没有直接提供答案(链接它以防有人想要阅读更多内容)。第五部分:Syntac parameters
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多