Types XText类型的文本
另一个问题。在试验XText时,我试图创建一种能够进行基本变量声明和值赋值的语言。我的第一次尝试是这样的:Types XText类型的文本,types,xtext,Types,Xtext,另一个问题。在试验XText时,我试图创建一种能够进行基本变量声明和值赋值的语言。我的第一次尝试是这样的: Grammar: elements+=Element*; Element: Declaration | ValueAssignment; Declaration: type=Type isArray='[]'? name=ID; enum Type: int | string; ValueAssignment: declaration=[De
Grammar:
elements+=Element*;
Element:
Declaration | ValueAssignment;
Declaration:
type=Type isArray='[]'? name=ID;
enum Type:
int | string;
ValueAssignment:
declaration=[Declaration] '=' ???;
int foo
int[] bar
string fooBar
foo = 10
bar = { 10, 20, 30 }
fooBar = "Sample text"
因此,一个简单的示例如下所示:
Grammar:
elements+=Element*;
Element:
Declaration | ValueAssignment;
Declaration:
type=Type isArray='[]'? name=ID;
enum Type:
int | string;
ValueAssignment:
declaration=[Declaration] '=' ???;
int foo
int[] bar
string fooBar
foo = 10
bar = { 10, 20, 30 }
fooBar = "Sample text"
所以我的问题是:
- 如果我们不考虑数组部分
现在,如果
具有声明
,则只有这样的文字才能位于 赋值,什么匹配整数正则表达式?与int
字符串相同
- 如果我们将阵列部分考虑在内,那怎么做呢?
当然我可以写一个规则,比如
ArrayLiteral:{ArrayLiteral}'{'elements+=???*'}'代码> 但元素规则的类型是什么?我怎样才能保证那里的类型
Grammar:
elements+=Element*;
Element:
Declaration | ValueAssignment;
Declaration:
type=Type isArray?='[]'? name=ID;
enum Type:
int | string;
ValueAssignment:
declaration=[Declaration] '=' value=Literal;
IntLiteral:
value=INT;
StringLiteral:
value=STRING;
PrimitiveLiteral:
IntLiteral | StringLiteral;
ArrayLiteral:
{ArrayLiteral} '{' elements+=PrimitiveLiteral* '}';
Literal:
PrimitiveLiteral | ArrayLiteral;
以及一个验证程序(语法本身对类型没有限制):
我修改的问题:这样做可以吗 使用语法,您可以编写语言的语法。源代码的语义通常不能用语法实现。因此,Xtext项目中存在验证类。它应该用于检查源代码的语义
是的,您解决了Xtext提供的问题。我不知道您的Web搜索是否有那么深入,但也许您已经阅读了一些关于“Xsemantics”的内容,它是另一个用于实现Xtext语言类型系统的Eclipse插件。编写类型规则有一种奇特且难以理解的DSL,然后将其转换为Java源代码并集成到“…MyDslValidator”类的类型层次结构中 使用语法,您可以编写语言的语法。源代码的语义通常不能用语法实现。因此,Xtext项目中存在验证类。它应该用于检查源代码的语义
是的,您解决了Xtext提供的问题。我不知道您的Web搜索是否有那么深入,但也许您已经阅读了一些关于“Xsemantics”的内容,它是另一个用于实现Xtext语言类型系统的Eclipse插件。编写类型规则有一种奇特且难以理解的DSL,然后将其转换为Java源代码并集成到“…MyDslValidator”类的类型层次结构中 使用语法,您可以编写语言的语法。源代码的语义通常不能用语法实现。因此,Xtext项目中存在验证类。它应该用于检查源代码的语义
是的,您解决了Xtext提供的问题。我不知道您的Web搜索是否有那么深入,但也许您已经阅读了一些关于“Xsemantics”的内容,它是另一个用于实现Xtext语言类型系统的Eclipse插件。编写类型规则有一种奇特且难以理解的DSL,然后将其转换为Java源代码并集成到“…MyDslValidator”类的类型层次结构中 使用语法,您可以编写语言的语法。源代码的语义通常不能用语法实现。因此,Xtext项目中存在验证类。它应该用于检查源代码的语义
是的,您解决了Xtext提供的问题。我不知道您的Web搜索是否有那么深入,但也许您已经阅读了一些关于“Xsemantics”的内容,它是另一个用于实现Xtext语言类型系统的Eclipse插件。编写类型规则有一种奇特且难以理解的DSL,然后将其转换为Java源代码并集成到“…MyDslValidator”类的类型层次结构中 关于Xsemantics的一个小补充(我是它的作者,它仍在积极开发):DSL的语法旨在模仿形式类型系统的语法;因此,如果您不熟悉正式类型系统,可能很难理解。然而,我认为,如果你打算实现任何非平凡的类型系统,那么无论如何都需要对形式类型系统有一个小的、基本的理解。关于Xsemantics的一个小补充(我是它的作者,它仍然在积极开发):DSL的语法是为了模仿形式类型系统的语法;因此,如果您不熟悉正式类型系统,可能很难理解。然而,我认为,如果你打算实现任何非平凡的类型系统,那么无论如何都需要对形式类型系统有一个小的、基本的理解。关于Xsemantics的一个小补充(我是它的作者,它仍然在积极开发):DSL的语法是为了模仿形式类型系统的语法;因此,如果您不熟悉正式类型系统,可能很难理解。然而,我认为,如果你打算实现任何非平凡的类型系统,那么无论如何都需要对形式类型系统有一个小的、基本的理解。关于Xsemantics的一个小补充(我是它的作者,它仍然在积极开发):DSL的语法是为了模仿形式类型系统的语法;因此,如果您不熟悉正式类型系统,可能很难理解。然而,我认为,如果您计划实现任何非平凡的类型系统,那么无论如何都需要对正式类型系统有一个小的、基本的了解。我建议您也编写一个类型计算机类来提供预期的和实际的类型,然后在验证中使用它