我正在 Racket 中创建一种编程语言,我目前正在使用 ragg,我正在阅读 Danny Yoo Guide Danny Yoo Ragg的指南,我定义了一个语法,例如
#lang ragg
nested-word-list: WORD
| LEFT-PAREN nested-word-list* RIGHT-PAREN
我通过传递标记来使用函数解析,
#lang racket
(require ragg/support)
(require "nested-word-list.rkt")
(define a-parsed-value
(parse (list (token 'LEFT-PAREN "(")
(token 'WORD "some")
(token 'LEFT-PAREN "[")
(token 'WORD "pig")
(token 'RIGHT-PAREN "]")
(token 'RIGHT-PAREN ")"))))
a-parsed-value
我知道该函数生成了一个我不知道那是什么的语法对象。
如果我传递一些像这样的无效令牌
#lang racket
(require ragg/support)
(require "nested-word-list.rkt")
(define a-parsed-value
(parse (list (token 'WORD "some")
(token 'LEFT-PAREN "[")
(token 'WORD "pig")
(token 'RIGHT-PAREN "]")
(token 'RIGHT-PAREN ")"))))
a-parsed-value
它会产生这样的错误
Encountered parsing error near token 'LEFT-PAREN ("[") while parsing #f [line=#f, column=#f, offset=#f]
我想知道它是如何产生错误的,例如,对于输出显示“错误:缺少括号”的前一种情况,以及可能发生的每个错误。
注意:比如我用的是简单的语法,但实际上,我原来的语法是Java之类的语言