首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Xtext解析Xtext语法

用Xtext解析Xtext语法
EN

Stack Overflow用户
提问于 2015-05-31 14:36:38
回答 1查看 1.3K关注 0票数 1

我想用Xtext解析Xtext语法。因此,我从GitHub中学到了语法,并对它做了一些修改。除了语法的导入和使用" with“的可重用语法的定义之外,一切都很好。

因此,当我创建一个应该解析的Xtext文件时,例如:

代码语言:javascript
复制
grammar org.xtext.example.mydsl.Expression with org.eclipse.xtext.common.Terminals

import "http://www.xtext.org/example/mydsl/MyDsl" as mydsl
generate expression "http://www.xtext.org/example/mydsl/Expression"

我发现了以下错误:

第1行:无法解析对语法'org.eclipse.xtext.common.Terminals‘的引用。(即使我将特性名更改为根规则的importURI或importedNamespace,并使用在同一个工作区中定义的语法!) 第3/4行:无法解析对EPackage‘http://www.xtext.org/example/mydsl/.’的引用。

但是,我需要完整的语法来完成我的进一步工作,其中特别包括重用的语法(比如Terminals、Xbase或工作区中的任何其他语法),因为语法可能包含引用重用规则的规则。

有办法解决语法问题吗?我已经想过要界定范围,但没能理解如何在我的情况下使用它。

顺便问一下,有没有一种解析文件扩展名.xtext的方法?我收到警告,两个内容解析器正在实现相同的文件扩展名,并以正常的Xtext方式解析我的模型。有办法切换到我的内容解析器吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 04:40:04

您可以按照https://www.eclipse.org/forums/index.php/t/1067192/上的对话框进行讨论,讨论的内容是使用片段更改worflow。

用于以编程方式解析(仅解析!)xtext-我编写了几行代码:

代码语言:javascript
复制
public static void ParseGrammar()
{
    String t = "grammar org.xtext.example.Entity with org.eclipse.xtext.common.Terminals\n" +

    "generate entity \"http://www.xtext.org/example/Entity\"\n" +

    "Model:\n" +
    "  (types+=Type)*;\n" +

    "Type:\n" +
    "  TypeDef | Entity;\n" +

    "TypeDef:\n" +
    "  \"typedef\" name=ID (\"mapsto\" mappedType=JAVAID)?;\n" +

    "JAVAID:\n" +
     " name=ID(\".\" ID)*;\n" +

    "Entity:\n" +
    "  \"entity\" name=ID (\"extends\" superEntity=[Entity])?\n" +
    "  \"{\"\n" +
    "    (attributes+=Attribute)*\n" +
    "  \"}\";\n" +

    "Attribute:\n" +
    "  type=[Type] (many?=\"*\")? name=ID;";

    new org.eclipse.emf.mwe.utils.StandaloneSetup().setPlatformUri("../");
    Injector injector = Guice.createInjector(new XtextRuntimeModule());

    Reader reader = new InputStreamReader(new StringInputStream(t));

    IParser parser = injector.getInstance(IParser.class);
    IParseResult result = parser.parse(reader);
    boolean err = result.hasSyntaxErrors();
    EObject eRoot = result.getRootASTElement();
}

就像你可以看到它使用“.和org.eclipse.xtext.common.Terminals .”。它运行时没有任何错误,并产生了AST。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30558640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档