Parsing 用Xtext解析Xtext语法
我想用Xtext解析Xtext语法。因此,我从中提取了语法,并对其进行了一点修改。除了语法的导入和用“with”定义重用的语法外,一切都很好 因此,当我创建一个应该解析的Xtext文件时,例如:Parsing 用Xtext解析Xtext语法,parsing,grammar,xtext,cross-reference,Parsing,Grammar,Xtext,Cross Reference,我想用Xtext解析Xtext语法。因此,我从中提取了语法,并对其进行了一点修改。除了语法的导入和用“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
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“…”的引用
但是,我需要完整的语法来进行进一步的工作,这尤其包括重用的语法(如Terminals、Xbase或工作区中的任何其他语法),因为语法可能包含引用重用语法中的规则的规则
有办法解决语法问题吗?我已经考虑过范围界定,但未能理解如何在我的案例中使用它
顺便问一下,有没有办法解析文件扩展名.xtext?我得到警告,两个内容解析器实现了相同的文件扩展名,我以正常的Xtext方式解析了我的模型。有办法切换到我的内容解析器吗?您可以按照讨论中的对话框进行操作,讨论的内容是使用片段更改工作流 为了以编程方式解析(仅解析!!)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();
}
正如您所看到的,它使用“…with org.eclipse.xtext.common.Terminals…”。它确实跑了
没有任何错误,并且生成了AST