我想接受0和255之间的十进制数这是我能想出最好的:

fragment my_token :
  ('0'..'9') |                    // 0 -> 9
  ('1'..'9' '0'..'9') |           // 0 -> 99
  ('1' '0'..'9' '0'..'9')  |      // 100 -> 199
  ('2' '0'..'4' '0'..'9') |       // 200 -> 249
  ('25' '0'..'5');                // 250 -> 255

但是我只是一个无能的n00b。 Surelry有更好的方法?

有帮助吗?

解决方案

您将有更好的结果,如果你放松的词法分析器和检查推迟到以后的时间。莱克斯NUMBER,那么当你将其转换以后就可以当值超出范围提供了一个非常具体的错误消息。如果您词法分析器严格,有人进入256,导致该错误信息是难以辨认的任何人已经不是之前作出的语法。

NUMBER
    :    '0'..'9'+
    ;

其他提示

我up'ed 280Z28的答案 - 做什么建议没有。但是如果你想另一种方式来写的模式,你可以试试:

0|1([0-9][0-9]?)?|2([0-4][0-9]?|5[0-5]?)?|[3-9][0-9]?

这是个我出比什么都重要了。很难核实(我第一次写这个我做了,直到我测试了它,这不是抓了个错误),而不是你应该在你的代码中使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top