代码之家  ›  专栏  ›  技术社区  ›  Atonic

提供语法规则Racket

  •  1
  • Atonic  · 技术社区  · 6 年前

    如何在racket中提供语法规则?

    我有类似的代码:

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

    如何使用“提供”语句来提供来自何处和星形?

    这就是我提供SELECT的方式:

    (provide SELECT)
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   soegaard    6 年前

    这里有一种方法。首先定义文本(如果在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) ...]))
    
    推荐文章