我正在用scala解析器编写一个简单的编程语言。到目前为止没有问题,但我担心函数名 / 变量名与保留字的关系。
我已经添加了一些特殊功能,如"floor" ~ gexp
或"top" ~ gexp
,我不希望任何使用此语言的人能够命名一个函数或类似的变量。我还没有找到一种检查方法。
rule varname
lowerid &{ |id| id[0].is_not_reserved } <VarNameNode>
但我不知道如何在scala中写这个
def varName : Parser[StringValue] = lowerid
答案 0 :(得分:1)
您可以使用^?
运算符:
def varName: Parser[StringValue] = lowerid ^? ({
case id if !isReserved(id) => id
}, { id => s"Error: $id is reserved." })