我想为一个旧的文件格式编写 PEG(Parsing Expression Grammar),其中大约有100个关键字不能用作标识符。
下面是一个关键字规则的例子:
IN = { ^"in" } // Caret means case insensitivity
keyword = { IN } // plus others
标识符规则如下:
identifier = @{ ( "_" | ASCII_ALPHA ) ~ ASCII_ALPHANUMERIC* }
目前,这个标识符规则将匹配所有关键字。因此,标识符规则变为:
identifier = @{ !keyword ~ ( "_" | ASCII_ALPHA ) ~ ASCII_ALPHANUMERIC* }
这种方式运行良好,但当标识符以与关键字相同的字母开头时会出问题。例如,标识符
inner
被视为关键字in
后跟文本。如何允许以关键字开头的标识符?请注意,在 PEST 解析器生成器中,终端只能指定为字符串,而不是正则表达式。
keyword
定义为{ IN &space }
吗? - Jmb