1

我正在用 scala 解析器编写一种简单的编程语言。到目前为止没有问题,但我担心关系函数名/变量名保留字的关系。

我已经添加了一些特殊的函数,比如"floor" ~ gexpor"top" ~ gexp并且我不希望任何使用这种语言的人能够命名一个函数或一个变量,比如它们。我还没有找到检查这个的方法。

在Ruby中我会写类似

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

但我不知道如何在 scala 中写这个

def varName : Parser[StringValue] = lowerid
4

1 回答 1

1

您可以使用^?运算符:

def varName: Parser[StringValue] = lowerid ^? ({
  case id if !isReserved(id) => id
}, { id => s"Error: $id is reserved." })
于 2013-10-30T20:41:30.550 回答