我使用用Antlr4编写的来生成C++目标解析器。
它有一些用Java编写的动作代码,所以我需要将它转换成C++以便它可以编译。
对于下面的代码,我不理解它的含义:
fragment
IdentifierStartChar
: // these are the valid identifier start characters below 0x7F
[a-zA-Z_]
| // these are the valid characters from 0x80 to 0xFF
[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F
我必须定义一个表达以下语句的规则:{x in y|x> 0}。对于理解的第一部分"x in y",我有一个子规则:
FIRSTPART: Name "in" Name
,而名称可以是一切。
我的问题是我不想要贪婪的行为。因此,它应该解析到"|“符号,然后停止。由于我是ANTLR4的新手,我不知道如何做到这一点。
诚挚的问候,
我想知道语法规范和语义分析之间的界限在哪里。哪个更好:使用详细的语法描述还是将细节留到语义阶段?例如:设想一种像C#这样的具有枚举类型的OO语言,它可以从原始类型“派生”
enum X : int { a = 1 }
现在,枚举的基本类型的正确性(在这种情况下:原始类型还是非原始类型)应该是语法检查或语义分析的主题吗?
在使用夜间构建作业运行SonarQube 5.1.2时,我得到了以下错误
[ERROR] [01:39:46.669] Class not found: javax.el.ELContext
[ERROR] [01:39:46.672] Class not found: javax.el.ELResolver
[ERROR] [01:39:46.673] Class not found: javax.el.ValueExpression
[ERROR] [01:39:46.674] Class not found: javax.el.ExpressionFactory
[ERROR] [01:
我希望创建一个Roslyn诊断分析器来查找隐式强制转换,特别是如下所示的构造:
DateTimeOffset v = new DateTime();
这意味着我要么必须检测隐式强制转换,要么必须找到对DateTimeOffset.op_Implicit(DateTime)的引用。
但问题是,罗斯林诊断分析器的工作是语法,而不是语义模型。因此,我能想到的唯一方法就是找出所有可能有隐式强制转换的语法结构,并对它们进行语义分析。然而,这是相当棘手的,因为即使我能够创建一个可以生成隐式转换的语法结构的详尽列表,对语言的更改也可以很容易地引入新的语法结构。
我的问题是,是否有一种替代上述办法的办法。具体