2013-10-30 55 views
1

我正在用scala解析器編寫一個簡單的編程語言。到目前爲止沒有問題,但即時通訊擔心的關係函數名稱/變量名稱保留字Scala解析器,設置保留字

我已經添加了一些特殊功能,如"floor" ~ gexp"top" ~ gexp,我不希望任何人使用這種語言能夠命名一個函數或像他們這樣的變量。我還沒有找到一種方法來檢查這一點。

在Ruby中我會寫類似

rule varname 
    lowerid &{ |id| id[0].is_not_reserved } <VarNameNode> 

但我不知道如何將我寫這篇文章的Scala

def varName : Parser[StringValue] = lowerid 

回答

1

可以使用^?操作:

def varName: Parser[StringValue] = lowerid ^? ({ 
    case id if !isReserved(id) => id 
}, { id => s"Error: $id is reserved." })