当前位置: 首页 > 知识库问答 >
问题:

xText和ANTLR

邓光赫
2023-03-14

我目前的项目重点是从DSL(即高级规范)生成代码。更具体地说,开发人员编写高级规范,这些规范在Java和Android中被解析并生成代码。对于解析器,我使用了ANTLR语法,对于代码生成,我使用了StringTemplateFiles。

然而,开发人员在记事本中编写高级规范。因此,我无法提供语法高亮显示、着色和错误处理。为了提供这种支持,我考虑使用xText。

我考虑将xText集成如下:

  • 开发人员将在xtext提供的编辑器支持中编写高级规范(基本上,我将编写xtext语法并生成编辑器支持)。在这里,Xtext编辑器将处理语法着色、语法高亮显示和错误处理
  • 我将把所有这些规格视为有效。txt输入,然后ANTLR解析这些文件。并生成Java和Android代码

需要您对以下问题提出建议:

(1) 如何提取用xtext编辑器编写的文件,并向ANTLR解析器提供输入?或者(2)我应该坚持使用xText并尝试集成ANTLR解析器和xText吗?(请建议-如何将xtext和ANTLR与一个简单的示例集成)或者(3)我应该只使用ANTLR和StringTemplateFiles,并尝试从中创建Eclipse插件吗?

还欢迎其他替代建议。

共有3个答案

孙斌
2023-03-14

通过例子:

public class CustomGenerator extends AbstractHandler{

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    ISelection selection = HandlerUtil.getCurrentSelection(event);

    //If your selection is an IFile
    //Selection from the Project Explorer
    if(selection instanceof IStructuredSelection){
        IStructuredSelection structuredSelection = (IStructuredSelection) selection;
        Object element = structuredSelection.getFirstElement();
        if(element instanceof IFile){
            IFile file = (IFile) element;
            InputStream contentOfYouFile = ((IFile) element).getContents();

            //make your job
        }
    }

    return null;
}

}

公孙宏远
2023-03-14

Xtext基于Antlr。所以不需要集成Antlr和Xtext。我建议您在Eclipse上创建一个Xtext项目,并使用mwe2文件生成工件。然后在src-gen文件夹中,您可以找到从Xtext语法生成的Antlr语法。

如果要从Xtext语法生成代码,可以使用Xtend。它已经提供了你所需要的一切。见:https://eclipse.org/Xtext/documentation/207_template.html.

否则,如果您已经有一个antlr语法和一个生成器,则需要(重新)在Xtext中编写它。

谷彦君
2023-03-14

您不需要集成XText和ANTLR;XText已经使用ANTLR进行实际解析。

 类似资料:
  • 前不久发布的 Eclipse 3.6—Helios 中包含 Xtext 1.0,一个语言开发框架。 Xtext是一种基于文本的领域特定语言(DSL)开发框架/工具。使用Xtext,你可以轻松的创建自己的编程语言和领域特定语言(DSL)。 对语法器而言,生成一个解析器或者基于语言的Eclipse编辑器(带有代码完成功能)是很有可能的。

  • 我正在用Xtext创建一个DSL,用于生成图像。然而,由于我对Xtext完全不了解,我遇到了一些问题,希望您能给我一些指导。 最终,我希望用户使用以下编码结构: 我在Xtext中想到了以下内容(我没有对MWE2做任何更改): 我需要解决几个问题,但我想知道解决这些问题的最佳方法是什么。 如何为终端规则SIZE中使用的INT设置边界。 如何设置bgColor:或bgsize:只能使用一次? 如何设置

  • 我不明白关键字的区别("-

  • 我试图将一个Xtext项目升级到2.9版本,但我不知道如何在使用V.2.9时发布一个元模型(从Xtext语法推断)。在以前的版本中,可以使用必要的自定义代码创建ModelNamePostProcessor.ext文件,并确保MWE2文件包含必要的设置,如下所示: 但是,在使用XText2.9时,似乎根本无法使用扩展。我没有对.ext文件做任何更改,但是MWE2工作流看起来有点不同: 有人知道这里的

  • 我目前正在研究Xtext,以创建一个可重用的DSL和一个构建在DSL之上的工件。简化后的项目布局如下: Projecta:包含基于XText的DSL、feature-project、updatesite等。 projectb:使用projectA中的工件生成代码。 projectc:使用从projectb生成的代码 使用Maven和Xtext构建projectA不是问题(网上已经有几个例子了),但

  • null 总之,我有一种感觉,我没有按预定的方式去做。那么,打算的方式是什么呢?我应该如何做语义突出显示?

  • 我想调用另一个文件中声明的变量。文件的包含是使用交叉引用完成的。同时也宣告了世界的召唤。这是语法: 声明是规则。 从文档中我了解到我必须在中做些什么,但我不知道具体是什么 编辑

  • 我有以下问题:我正在为GLSL着色语言创建一个编辑器。我希望在某些情况下允许关键字作为标识符,因为内置函数的名称可以用作标识符。 例如: 和不被识别为标识符。 完整语法供参考:http://paste2.org/YwDNkBYW 解决方案: 我创建了一个包含所有内置函数的源文件: 我使用保留的关键字来区分内置函数和本地创建的函数: ...在ScopeProvider中添加了以下内容: 在中,我在迭