2016-04-10 119 views
1

你好,我寫了BNF語法是這樣的:DrRacket BNF語法

#lang pl 

#| BNF for the LE language: 
    <LE> ::= <num> 
      | <null> 
|# 

(define-type LE 
    [Num Number] 
) 

,但我不知道如何檢查,如果這個代碼是好的... 如何在球拍檢查的唯一的事情,我們可以使用它的空和數字?

我覺得這樣的事情:

(test 5) 

(test '()) 

工作壓力太大了,我不是在我的BNF設置列表

(如果這個代碼並不好 - 我會很高興爲一些BNF的例子和檢查...)

tnx很多

+1

由於語言'pl'不是主要發行版的一部分,因此您需要提供更多信息。 Bremner的課程中有'pl'語言嗎? (http://www.cs.unb.ca/~bremner/teaching/cs3613/racket-setup/)。如果是的話,哪個版本的球拍適合? – soegaard

回答

1

沒有測試我建議嘗試以下程序:

#lang pl 

#| BNF for the LE language: 
    <LE> ::= <num> 
      | <null> 
|# 

(define-type LE 
    [Num Number] 
    [Nul Null] 
    [Kons LE LE]) 

(: test : LE -> LE) 
(define (test x) 
    x) 

(test (Num 5))  ; this is accepted since 5 is a Number 
(test (Nul '()) 
(test (Kons (Num 1) (Num 2))) 
; (test (Num "foo")) ; this provokes an error (as it should) 

注意(: test : LE -> LE)聲明類型test功能。由於在(test '())空列表不匹配LE類型,你應該得到一個錯誤。

編輯:示例已更新爲使用(Num 5)而不僅僅是5

編輯2:增加了Kons

+0

第一次測試給我錯誤: 類型檢查器:類型不匹配 預計:數字 給出:正確的字節在:5 – user165210

+1

我已更新代碼。 PS:pl語言可從pl.barzilay.org – soegaard

+0

tnx很多,最後一個。如何檢查測試中的「null」? – user165210