我想用Xtext解析Xtext语法。因此,我从GitHub中学到了语法,并对它做了一些修改。除了语法的导入和使用" with“的可重用语法的定义之外,一切都很好。
因此,当我创建一个应该解析的Xtext文件时,例如:
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方式解析我的模型。有办法切换到我的内容解析器吗?
发布于 2015-06-24 04:40:04
您可以按照https://www.eclipse.org/forums/index.php/t/1067192/上的对话框进行讨论,讨论的内容是使用片段更改worflow。
用于以编程方式解析(仅解析!)xtext-我编写了几行代码:
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。
https://stackoverflow.com/questions/30558640
复制相似问题