Parsing 球拍';s语法分析:标识符与预期不匹配

Parsing 球拍';s语法分析:标识符与预期不匹配,parsing,scheme,racket,Parsing,Scheme,Racket,我在Racket的语法解析方面遇到了问题。特别是,我收到以下错误消息: unknown: rule: expected one of these identifiers: `model', `line', or `rule' at: rule in: (rule (predicate (symbol "T") "[" (symbol-list (symbol "X")) "]") "<-"

我在Racket的
语法解析方面遇到了问题。特别是,我收到以下错误消息:

unknown: rule: expected one of these identifiers: `model', `line', or `rule'
at: rule
in: (rule (predicate (symbol "T") "[" (symbol-list (symbol "X")) "]") "<-" (predicate (symbol "Q") "[" (symbol-list (symbol "X")) "]"))
以下是输入(通过
语法->数据
传递):


(模型(行(规则)(谓词(符号T)[(符号列表(符号X))]))是否实际定义了
规则
~literal
识别绑定,因此如果没有绑定,它将不起作用。在这种情况下,您将需要
~datum
。是否实际定义了
规则
~literal
识别绑定,因此如果没有绑定,它将不起作用。您需要
~datutum
在这种情况下,请改为。

包括导致错误消息的表达式。实际上,如果可能,请包括整个程序……我已经更新了帖子。问题是,
规则
是否实际定义?
~literal
识别绑定,因此如果没有绑定,它将不起作用。在这种情况下,您需要使用
~datum
@SoraweePorncharoenwase谢谢,这正是问题所在。添加您的评论作为答案,我会接受。包括导致错误消息的表达式。实际上,如果可能,包括整个程序……我已经更新了帖子。问题是,
规则
是否确实定义了?
~literal
识别绑定,因此如果有“没有绑定,它不会工作。在这种情况下,您需要使用
~datum
。@SoraWebornCharoEnwase谢谢,这正是问题所在。添加您的评论作为答案,我将接受它。”。
(define (parse-carl s)
(syntax-parse s
    [((~literal model) ~rest x)
        (with-syntax ([x (map parse-carl (syntax-e #'x))]) #'x)]
    [((~literal line) x) (with-syntax ([x (parse-carl #'x)]) #'x)]
    [((~literal rule) p1 "<-" p2) 'ok]))
(model (line (rule (predicate (symbol T) [ (symbol-list (symbol X)) ]) <- (predicate (symbol Q) [ (symbol-list (symbol X)) ]))) 
(line (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <-   (predicate (symbol Q) [ (symbol-list (symbol X)) ]))) 
(line (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <- (predicate (symbol T) [ (symbol-list (symbol X)) ]))) 
(line (query (rule (predicate (symbol Y) [ (symbol-list (symbol X)) ]) <- (predicate (symbol T) [ (symbol-list (symbol X)) ])) ?)) 
)