2

我正在 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之类的语言

4

1 回答 1

1

听起来您在问如何改进或修改 ragg 生成的错误消息。我相信,一旦您添加了一个真正的词法分析器(在文档的以下部分中),您将获得错误的良好源位置信息。

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

于 2016-05-14T21:56:35.873 回答