【问题标题】:How to write a grammar for hex ints in BNFC?如何在 BNFC 中为十六进制整数编写语法?
【发布时间】:2017-05-16 18:55:42
【问题描述】:

这是十六进制整数的小语法。

Numbers . Numbers ::= [HexInt];
separator HexInt " " ;

token HexDigit ["0123456789abcdefABCDEF"] ;
rules HexInt ::= "0x" [HexDigit] ;
separator HexDigit "" ;

但是,它无法解析“0xff”,因为词法分析器将“ff”视为单个标记。我该如何解决?

【问题讨论】:

    标签: bnfc


    【解决方案1】:

    没有简单的方法可以修复它。 BNFC 中似乎存在一个错误,其中包括 Ident 的内置规则,即使您的语法没有使用它,并且在您的示例中它优先于 HexDigit(最长匹配获胜)。

    但是,您可以为十六进制编写令牌规则:

    token HexInt ({"0x"} ["0123456789abcdefABCDEF"] +) ;
    

    【讨论】:

      【解决方案2】:

      在 BNFC 中,以下声明表明 HexDigits 将由空格分隔(而不是像看起来那样由 nothing 分隔):

      separator HexDigit "" ;
      

      【讨论】:

        猜你喜欢
        • 2021-09-29
        • 2019-05-16
        • 2010-10-16
        • 2021-11-19
        • 2014-04-16
        • 2015-04-30
        • 2017-08-12
        相关资源
        最近更新 更多