Types 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

另一个问题。在试验XText时,我试图创建一种能够进行基本变量声明和值赋值的语言。我的第一次尝试是这样的:

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+=???*'}'
    但元素规则的类型是什么?我怎样才能保证那里的类型
我浏览了XText指南,但是在任何类型起作用的地方,它都使用了非常混乱的XBase元素。如果您能提供任何帮助或指导,我们将不胜感激

更新:

我成功地对这个简单的示例执行了基本类型检查,但是我不确定这是否是最佳解决方案:

略加修改的语法:

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的语法是为了模仿形式类型系统的语法;因此,如果您不熟悉正式类型系统,可能很难理解。然而,我认为,如果您计划实现任何非平凡的类型系统,那么无论如何都需要对正式类型系统有一个小的、基本的了解。

我建议您也编写一个类型计算机类来提供预期的和实际的类型,然后在验证中使用它