- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
} TOKEN : { ){2}-6ren">
我正在自学在一个业余爱好项目中使用 JavaCC,并有一个简单的语法来编写解析器。解析器的一部分包括以下内容:
TOKEN : { < DIGIT : (["0"-"9"]) > }
TOKEN : { < INTEGER : (<DIGIT>)+ > }
TOKEN : { < INTEGER_PAIR : (<INTEGER>){2} > }
TOKEN : { < FLOAT : (<NEGATE>)? <INTEGER> | (<NEGATE>)? <INTEGER> "." <INTEGER> | (<NEGATE>)? <INTEGER> "." | (<NEGATE>)? "." <INTEGER> > }
TOKEN : { < FLOAT_PAIR : (<FLOAT>){2} > }
TOKEN : { < NUMBER_PAIR : <FLOAT_PAIR> | <INTEGER_PAIR> > }
TOKEN : { < NEGATE : "-" > }
使用 JavaCC 编译时,我得到输出:
Warning: Regular Expression choice : FLOAT_PAIR can never be matched as : NUMBER_PAIR
Warning: Regular Expression choice : INTEGER_PAIR can never be matched as : NUMBER_PAIR
我确信这是一个简单的概念,但我不明白这个警告,因为我是解析器生成和正则表达式的新手。
这个警告是什么意思(用新手术语来说)?
最佳答案
我不懂JavaCC,但我是一名编译器工程师。
FLOAT_PAIR
规则不明确。考虑以下文本:
0.0
这可以是 FLOAT 0
后跟 FLOAT .0
;或者可以是 FLOAT 0.
后跟 FLOAT 0
;两者都会产生 FLOAT_PAIR。或者它可以是单个 FLOAT 0.0
。
但更重要的是,您正在以一种永远不可能起作用的方式使用词法分析和组合。考虑这个数字:
12345
这可以被解析为INTEGER 12, INTEGER 345
,从而产生INTEGER_PAIR
。或者它可以被解析为INTEGER 123、INTEGER 45
、另一个INTEGER_PAIR
。或者它可能是另一个 token INTEGER 12345
。之所以存在此问题,是因为您不需要 INTEGER_PAIR
(或 FLOAT_PAIR
)的词汇元素之间存在空格。
您几乎不应该尝试在词法分析器中处理这样的对。相反,您应该将纯数字(INTEGER
和 FLOAT
)作为标记来处理,并在解析器中处理诸如否定和配对之类的事情,其中空格已被处理和剥离。
(例如,你要如何处理“----42”
?这是大多数编程语言中的有效表达式,它会正确计算多个否定,但不会被处理由你的词法分析器。)
此外,请注意词法分析器中的个位数整数不会匹配为 INTEGER
,它们将显示为 DIGIT
。不过,我不知道 JavaCC 的正确语法可以为您解决这个问题。您想要的是将 DIGIT
定义为不作为标记,而只是可以在其他标记的定义中使用的东西;或者,无论您在规则中使用 DIGIT
的位置,直接嵌入 DIGIT
([0-9]
) 的定义。
关于regex - JavaCC警告 "Regular expression choice : FOO can never be matched as : BAR"的解释和解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791591/
我正在使用 Python2 和 Django 1.9。 基本上我有一个包含两个下拉菜单的表单。第二个下拉列表取决于第一个下拉列表的值。 例如,如果下拉列表 #1 选择了“类别”选项,则下拉列表 #2
我有 2 个 Django 模型——主要(产品)和链接的详细信息(PhysicalProperty 是通过附加模型 ProductMetricals 的多对多链接)。 在主模型 Product 中,我
我正在尝试创建一个带有两个下拉菜单的网站:部门和类(class)编号。下拉菜单的数据来 self 的 SQL 数据库的“类(class)”表。现在我的网站正确初始化并在下拉菜单中显示正确的选项。然而,
你好,我对 python 相当陌生,我的一段代码遇到了问题。在一个“if”语句之后,当我不希望它执行时,我的代码将继续执行下一个“if”语句。我尝试过 elif 但它提出了无效的语法。 print(
我已经在我的 Django 项目中安装了 MongoDB。因为是我第一次使用 Mongo,我决定尝试一下它是如何工作的,我创建了一个简单的程序来存储数据(在我的例子中是价格和数量)。 该项目称为“ex
我已经尝试过 ActionListener 和 ItemListener,但它不起作用,而且我也尝试过搜索可能适用于它的代码和方法,但我只是没有找到它,主要可能是因为 JCombobox 更受欢迎,我
抱歉,我是编程界的新手。我正在创建一个控制台应用程序,它基本上会根据您的输入来确定您是想将摄氏温度转换为华氏温度,还是相反。 我遇到的问题是: "Error 3 A local variable na
random.SystemRandom().choice() 和有什么区别& random.choice()在 python ? 我有 seen the former being used ,不止一处
我的 XSD 有问题。我的 XSD 包含一个 xs:choice 来实现选择其中一种类型的选项。不允许选择无类型(或 Null)! 我已经通过 xsd.exe 从 xsd
我有 2 个应用程序。 input:具有包含下拉列表的形式:region。下拉列表值来自结果数据库(由用户上传)。填写表单时,用户需要从下拉列表中选择值。 result:有数据库 现在我可以在输入表单
有人可以告诉我我可能做错了什么吗?我在运行 python 代码时不断收到此消息: import random foo = ['a', 'b', 'c', 'd', 'e'] random_item =
为什么 numpy.random.choice 与 random.choice 不同?当我这样做时: >>> random.choice([(1,2),(4,3)]) (1, 2) 有用。 但是当
我有一个由 2 个 ChoiceField 和一个 CharField 组成的表单。当选择第一个 ChoiceField 的项目时,通过 ajax 填充第二个 ChoiceField。 填充它的模板如
为什么我们不能在表单中使用Choice.IMPLICIT,而我们可以使用Choice.EXCLUSIVE。当我使用 Choice.IMPLICIT 时,它给了我一个 java.lang.Illegal
例子: element = ['Flaming', 'Cold'] fire_properties = ['of Fire', 'of Flame'] cold_properties = ['of I
我正在生成我们的 Java Web 服务 WSDL,然后每次进行更改时将其导入到我们的 C# 应用程序中。每次这样做时,xs:choice元素会重新生成,但通常具有不同的数量,具体取决于首先生成的元素
我是 Django 新手。我使用简单的 ajax 根据类(class)选择动态更新选择字段学期。但是在提交表单时,我收到错误选择有效的选择。 所选选项不是可用选项之一。代码如下: 表单.py: fro
1)是否有symfony方法? 我有一个基本形式(未映射到数据库),其中包含一些选择字段,例如: $builder->add('civility', 'choice', array('cho
我已经为这个问题苦苦挣扎了一段时间,所以非常感谢任何帮助。 情况如下:我的应用程序有一个名为 InitialViewController 的 UIViewController 子类。这个 View C
这个问题在这里已经有了答案: How can I dynamic populate an option widget in tkinter depending on a choice from a
我是一名优秀的程序员,十分优秀!