显示错误,在球拍中创建编程语言

show errors, creating a programming language in racket

我正在用 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]

我想知道它是如何产生错误的,例如,对于输出显示 "ERROR: MISSING BRACKET" 的前一种情况,以及对于可能发生的每个错误的这种情况。

注意:比如我用的是简单的语法,但实际上,我原来的语法是这样的语言Java

您好像在问如何改进或修改 ragg 生成的错误消息。我相信一旦你添加了一个真正的词法分析器(在下面 文档的部分)你会得到很好的源位置信息 错误。

除此之外,我想我会敦促你......担心其他事情?我不确切知道 ragg 允许生成错误消息的自定义程度,但这似乎超出了像 ragg 这样的工具的范围。