我使用用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
我想知道语法规范和语义分析之间的界限在哪里。哪个更好:使用详细的语法描述还是将细节留到语义阶段?例如:设想一种像C#这样的具有枚举类型的OO语言,它可以从原始类型“派生”
enum X : int { a = 1 }
现在,枚举的基本类型的正确性(在这种情况下:原始类型还是非原始类型)应该是语法检查或语义分析的主题吗?
我正在寻找一种有趣的定制语言,主要是为了了解它是如何工作的,但在深入代码之前,我在概念上遇到了一些麻烦。
我看过万花筒示例代码和许多其他在线资源,但我对如何做以下几件事感到困惑:
我的目标将我的代码转换成C++代码或直接转换成具有C++样式的AST的机器代码
理性主要是为了学习,但如果我做得足够好,我可以进一步发展它,那就太好了。
我的语言是什么?我的语言将专门用于和数据库创建,重点是版本控制和缓存策略。
我不知道如何将我的“语言”中的一些信息翻译成与等价的C++。
示例:
//An Integer type which is nullable and the default value of
是否有从文本中提取个人和地名的C#算法?
例如,鉴于以下案文:
St. Mark died at Alexandria, in Egypt. He was martyred, I think.
However, that has nothing to do with my legend. About the founding of
the city of Venice--
(摘自马克吐温的“无辜者海外”)
...is有任何提取方法:
St. Mark
Alexandria (or better yet, "Alexandria, Egypt")
Venice
我意识到没有
public Class A {
public static String s = "s";
public static int i = 0;
public int j = 1;
public static String getStaticString() {
int k = 2;
return s;
}
public String getString() {
int l = 3;
return "something";
}
}
在Java中,
我想使用扩展的(EBNF)上下文无关语法来定义一组无序的值。在EBNF中很容易定义一个无序的值列表,例如:
value = 'A' | 'B' | 'C';
list = value, {',', value};
然而,我怀疑它是否可以做一个无序的集合。
以下是有效的无序值集的示例:
A, B, C, D
A, B, D, C
A, D, C, B
...
D, C, B, A
虽然无效的名单是:
A, A, C, D
B, C, C, B
A, A, A, A
...
或者任意长度的列表。
A, A, B, C, D, A
A,