这是十六进制整数的一个小语法。
Numbers . Numbers ::= [HexInt];
separator HexInt " " ;
token HexDigit ["0123456789abcdefABCDEF"] ;
rules HexInt ::= "0x" [HexDigit] ;
separator HexDigit "" ;
然而,它无法解析“0xff”,因为词法分析器将“ff”视为单个标记。我该如何解决这个问题?
答案 0 :(得分:1)
在 BNFC 中,以下声明表示 HexDigits
由空格分隔(而不是 nothing,看起来如此):
separator HexDigit "" ;
答案 1 :(得分:0)
没有简单的方法来解决它。 BNFC中似乎存在一个错误,包括Ident
的内置规则,即使您的语法没有使用它,并且它在您的示例中优先于HexDigit
(最长匹配)获胜)。
但是,您可以为十六进制编写令牌规则:
token HexInt ({"0x"} ["0123456789abcdefABCDEF"] +) ;