Eclipse xtext处理左递归语法
我正在使用XTEXT2.4,希望同时支持map和set,我的语法如下所示Eclipse xtext处理左递归语法,eclipse,parsing,compiler-construction,xtext,Eclipse,Parsing,Compiler Construction,Xtext,我正在使用XTEXT2.4,希望同时支持map和set,我的语法如下所示 <term> ::- <collection> <collection> ::- <map> | <set> <map> ::- '{' (<term> ':' <term> (',' <term> ':' <term> )*)? '}' <set> ::- '{' (<term>
<term> ::- <collection>
<collection> ::- <map> | <set>
<map> ::- '{' (<term> ':' <term> (',' <term> ':' <term> )*)? '}'
<set> ::- '{' (<term> (',' <term>)* )+ '}'
错误消息(以错误(211)开头):
0[main]INFO lipse.emf.mwe.utils.StandaloneSetup-注册平台uri'/Users/jcwu/opensource/xtext problemistic'
116[main]INFO lipse.emf.mwe.utils.StandaloneSetup-添加生成的EPackage“org.eclipse.xtext.xbase.XbasePackage”
454[main]INFO clipse.emf.mwe.utils.GenModelHelper-已注册的GenModel'http://www.eclipse.org/Xtext/Xbase/XAnnotations'from'平台:/resource/org.eclipse.xtext.xbase/model/xbase.genmodel'
459[main]INFO clipse.emf.mwe.utils.GenModelHelper-已注册的GenModel'http://www.eclipse.org/xtext/xbase/Xtype'from'平台:/resource/org.eclipse.xtext.xbase/model/xbase.genmodel'
479[main]INFO clipse.emf.mwe.utils.GenModelHelper-已注册的GenModel'http://www.eclipse.org/xtext/xbase/Xbase'from'平台:/resource/org.eclipse.xtext.xbase/model/xbase.genmodel'
479[main]INFO clipse.emf.mwe.utils.GenModelHelper-已注册的GenModel'http://www.eclipse.org/xtext/common/JavaVMTypes'from'平台:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel'
1660[main]INFO ipse.emf.mwe.utils.DirectoryCleaner-Cleaning/Users/jcwu/opensource/xtext problemistic/org.xtextext.problem.term//org.xtextext.problem.term/src-gen
1665[main]INFO ipse.emf.mwe.utils.DirectoryCleaner-Cleaning/Users/jcwu/opensource/xtext problemistic/org.xtextext.problem.term//org.xtextext.problem.term.ui/src-gen
1666[main]INFO ipse.emf.mwe.utils.DirectoryCleaner-Cleaning/Users/jcwu/opensource/xtext problemistic/org.xtextext.problem.term//org.xtextext.problem.term.tests/src-gen
2033[main]INFO ipse.xtext.generator.LanguageConfig-为org.xtext.problem.Term生成包含片段的基础结构:ImplicitRuntimeFragment、ImplicitUiFragment、GrammarAccessFragment、EcoreGeneratorFragment、SerializerFragment、ResourceFactoryFragment、xtextantlGeneratorFragment、ValidatorFragment、ImportNamespacesCopingFragment、,限定名称片段、BuilderIntegrationFragment、GeneratorFragment、FormatterFragment、LabelProviderFragment、OutlineTreeProviderFragment、QuickOutlineFragment、QuickfixProviderFragment、ContentAssistFragment、XtextAntlrUiGeneratorFragment、Junit4Fragment、RefactorElementNameFragment、TypesGeneratorFragment、XbaseGeneratorFragment、,CodetemplatesGeneratorFragment,CompareFragment
4115[main]INFO clipse.emf.mwe.utils.GenModelHelper-已注册的GenModel'http://www.xtext.org/problem/Term“来自”平台:/resource/org.xtext.problem.term/src-gen/org/xtext/problem/term.genmodel”
错误(211):../org.xtext.problem.term/src gen/org/xtext/problem/parser/antlr/internal/InternalTerm.g:119:1:[致命]规则规则集合具有非LL(*)决策,因为可以从alts 1,2访问递归规则调用。通过左因子分解或使用语法谓词或使用backtrack=true选项进行解析。
5918[main]错误Generator.CompositeGeneratorFragment-java.io.FileNotFoundException:../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTermLexer.java(无此类文件或目录)
org.eclipse.emf.common.util.WrappedException:java.io.FileNotFoundException:../org.xtext.problem.term/src-gen/org/xtextext/problem/parser/antlr/internal/InternalTermLexer.java(没有这样的文件或目录)
位于org.eclipse.xtext.util.Files.readFileIntoString(Files.java:129)
位于org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarningsImpl(AbstractAntlrGeneratorFragment.java:132)
位于org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:142)
位于org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:138)
位于org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:49)
位于org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:92)
位于org.eclipse.xtext.generator.LanguageConfig.generate(LanguageConfig.java:113)
位于org.eclipse.xtext.generator.generator.generate(generator.java:361)
位于org.eclipse.xtext.generator.generator.invokeInternal(generator.java:128)
位于org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
位于org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
位于org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
位于org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
位于org.eclipse.emf.mwe2.runtime.workflow.workflow.run(workflow.java:19)
位于org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
位于org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
位于org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
位于org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
位于org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
原因:java.io.FileNotFoundException:../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTermLexer.java(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:138)
位于java.io.FileInputStream。(FileInputStream.java:97)
位于org.eclipse.xtext.util.Files.readFileIntoString(Files.java:126)
... 还有18个
错误(211):../org.xtext.problem.term.ui/src gen/org/xtext/problem/ui/contentassist/antlr/internal/InternalTerm.g:176:1:[致命]规则集合替代方案具有非LL(*)决策,因为可以从alts 1,2访问递归规则调用。通过左因子分解或使用语法谓词或使用backtrack=true选项进行解析。
6617[主要]呃
<term> ::- '{' (<term> ':' <term> (',' <term> ':' <term> )*)? '}' |
'{' (<term> (',' <term>)* )+ '}'
grammar org.xtext.problem.Term with org.eclipse.xtext.common.Terminals
generate term "http://www.xtext.org/problem/Term"
Term:
term = Collection
;
Collection:
MyMap | MySet
;
MyMap:
{MyMap} '{'( keys+= Term ':' values += Term ( ',' keys+=Term ':' values +=Term)* )?'}'
;
MySet:
{MySet} '{'( values += Term ( ',' values +=Term)* )?'}'
;
0 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering platform uri '/Users/jcwu/opensource/xtext-problemistic'
116 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Adding generated EPackage 'org.eclipse.xtext.xbase.XbasePackage'
454 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.eclipse.org/Xtext/Xbase/XAnnotations' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
459 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xtype' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
479 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.eclipse.org/xtext/xbase/Xbase' from 'platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel'
479 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.eclipse.org/xtext/common/JavaVMTypes' from 'platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel'
1660 [main] INFO ipse.emf.mwe.utils.DirectoryCleaner - Cleaning /Users/jcwu/opensource/xtext-problemistic/org.xtext.problem.term/../org.xtext.problem.term/src-gen
1665 [main] INFO ipse.emf.mwe.utils.DirectoryCleaner - Cleaning /Users/jcwu/opensource/xtext-problemistic/org.xtext.problem.term/../org.xtext.problem.term.ui/src-gen
1666 [main] INFO ipse.emf.mwe.utils.DirectoryCleaner - Cleaning /Users/jcwu/opensource/xtext-problemistic/org.xtext.problem.term/../org.xtext.problem.term.tests/src-gen
2033 [main] INFO ipse.xtext.generator.LanguageConfig - generating infrastructure for org.xtext.problem.Term with fragments : ImplicitRuntimeFragment, ImplicitUiFragment, GrammarAccessFragment, EcoreGeneratorFragment, SerializerFragment, ResourceFactoryFragment, XtextAntlrGeneratorFragment, ValidatorFragment, ImportNamespacesScopingFragment, QualifiedNamesFragment, BuilderIntegrationFragment, GeneratorFragment, FormatterFragment, LabelProviderFragment, OutlineTreeProviderFragment, QuickOutlineFragment, QuickfixProviderFragment, ContentAssistFragment, XtextAntlrUiGeneratorFragment, Junit4Fragment, RefactorElementNameFragment, TypesGeneratorFragment, XbaseGeneratorFragment, CodetemplatesGeneratorFragment, CompareFragment
4115 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.xtext.org/problem/Term' from 'platform:/resource/org.xtext.problem.term/src-gen/org/xtext/problem/Term.genmodel'
error(211): ../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTerm.g:119:1: [fatal] rule ruleCollection has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
5918 [main] ERROR enerator.CompositeGeneratorFragment - java.io.FileNotFoundException: ../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTermLexer.java (No such file or directory)
org.eclipse.emf.common.util.WrappedException: java.io.FileNotFoundException: ../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTermLexer.java (No such file or directory)
at org.eclipse.xtext.util.Files.readFileIntoString(Files.java:129)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarningsImpl(AbstractAntlrGeneratorFragment.java:132)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:142)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:138)
at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:49)
at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:92)
at org.eclipse.xtext.generator.LanguageConfig.generate(LanguageConfig.java:113)
at org.eclipse.xtext.generator.Generator.generate(Generator.java:361)
at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:128)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
Caused by: java.io.FileNotFoundException: ../org.xtext.problem.term/src-gen/org/xtext/problem/parser/antlr/internal/InternalTermLexer.java (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at org.eclipse.xtext.util.Files.readFileIntoString(Files.java:126)
... 18 more
error(211): ../org.xtext.problem.term.ui/src-gen/org/xtext/problem/ui/contentassist/antlr/internal/InternalTerm.g:176:1: [fatal] rule rule__Collection__Alternatives has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
6617 [main] ERROR enerator.CompositeGeneratorFragment - java.io.FileNotFoundException: ../org.xtext.problem.term.ui/src-gen/org/xtext/problem/ui/contentassist/antlr/internal/InternalTermLexer.java (No such file or directory)
org.eclipse.emf.common.util.WrappedException: java.io.FileNotFoundException: ../org.xtext.problem.term.ui/src-gen/org/xtext/problem/ui/contentassist/antlr/internal/InternalTermLexer.java (No such file or directory)
at org.eclipse.xtext.util.Files.readFileIntoString(Files.java:129)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarningsImpl(AbstractAntlrGeneratorFragment.java:132)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:142)
at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.suppressWarnings(AbstractAntlrGeneratorFragment.java:138)
at org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment.generate(XtextAntlrUiGeneratorFragment.java:53)
at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:92)
at org.eclipse.xtext.generator.LanguageConfig.generate(LanguageConfig.java:113)
at org.eclipse.xtext.generator.Generator.generate(Generator.java:361)
at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:128)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
Caused by: java.io.FileNotFoundException: ../org.xtext.problem.term.ui/src-gen/org/xtext/problem/ui/contentassist/antlr/internal/InternalTermLexer.java (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at org.eclipse.xtext.util.Files.readFileIntoString(Files.java:126)
... 18 more
6650 [main] INFO text.generator.junit.Junit4Fragment - generating Junit4 Test support classes
6682 [main] INFO text.generator.junit.Junit4Fragment - generating Compare Framework infrastructure
7118 [main] INFO .emf.mwe2.runtime.workflow.Workflow - Done.
Model: term += Term*;
Term: c=Collection;
Collection: ( => Map | Set );
Map: '{' {Map} ( entries += MapEntry ( ',' entries += MapEntry )* )? '}';
MapEntry: key=Term ':' value=Term;
Set: '{' ( values += Term ( ',' values += Term )* )+ '}';
// Maps
{}
{ {} : {} }
{ {} : {}, {} : {}}
// Sets
{ {} }
{ {} {} {} {} }
{ {}, {}, {}, {} }
// nested / mixed
{ { { {}:{} } } : {}, {} : { {}:{} }}
{ { { {}:{} } } : {}, {} : { {}:{ {}{}{} } }}