Reputation: 15357
I'm trying to make a grammar:
grammar mestra.DmxLightShow with org.eclipse.xtext.common.Terminals
generate dmxLightShow "http://www.DmxLightShow.mestra"
Mestra:
songs += Song+;
Song:
'Song' name=ID 'tcs' tcs+=TriggersAndCommands* 'sequences' sequences+=[Sequence]+';';
TriggersAndCommands:
trigger=[Trigger] | command=[Command] ;
Sequences:
sequences += Sequence+;
Sequence:
'Sequence' name=ID ';';
Trigger:
'Trigger' name=ID ';';
Command:
'Command' name=ID ';';
Although there is no error icon in the grammar editor, when Generate Xtext Artifacts an error is generated (the full text is at the end):
warning(200): ../mestra.dmxlightshow/src-gen/mestra/parser/antlr/internal/InternalDmxLightShow.g:199:2: Decision can match input such as "RULE_ID" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
error(201): ../mestra.dmxlightshow/src-gen/mestra/parser/antlr/internal/InternalDmxLightShow.g:199:2: The following alternatives can never be matched: 2
I guess the problem is inside the following fragment:
TriggersAndCommands:
trigger=[Trigger] | command=[Command] ;
What I want it to do, is accepting a line like:
Song NameOfSong tcs Trigger1 Command2 Trigger3 sequences SequenceName;
to add later:
Command Command1;
Command Command2;
Trigger Trigger1;
How should I create the line to accomplish this?
(Full error output):
0 [main] INFO text.xtext.generator.XtextGenerator - Initializing Xtext generator
6 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Adding generated EPackage 'org.eclipse.xtext.common.types.TypesPackage'
186 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering project mestra.dmxlightshow at 'file:/C:/Users/Michel/Mestra/DmxLightShow/mestra.dmxlightshow/'
186 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering project mestra.dmxlightshow.tests at 'file:/C:/Users/Michel/Mestra/DmxLightShow/mestra.dmxlightshow.tests/'
187 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering project mestra.dmxlightshow.ide at 'file:/C:/Users/Michel/Mestra/DmxLightShow/mestra.dmxlightshow.ide/'
187 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering project mestra.dmxlightshow.ui at 'file:/C:/Users/Michel/Mestra/DmxLightShow/mestra.dmxlightshow.ui/'
188 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering project mestra.dmxlightshow.ui.tests at 'file:/C:/Users/Michel/Mestra/DmxLightShow/mestra.dmxlightshow.ui.tests/'
193 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Using resourceSet registry. The registered Packages will not be registered in the global EPackage.Registry.INSTANCE!
379 [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'
382 [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'
394 [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'
394 [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'
916 [main] INFO text.xtext.generator.XtextGenerator - Generating mestra.DmxLightShow
2024 [main] INFO nerator.ecore.EMFGeneratorFragment2 - Generating EMF model code
2050 [main] INFO clipse.emf.mwe.utils.GenModelHelper - Registered GenModel 'http://www.DmxLightShow.mestra' from 'platform:/resource/mestra.dmxlightshow/model/generated/DmxLightShow.genmodel'
warning(200): ../mestra.dmxlightshow/src-gen/mestra/parser/antlr/internal/InternalDmxLightShow.g:199:2: Decision can match input such as "RULE_ID" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
error(201): ../mestra.dmxlightshow/src-gen/mestra/parser/antlr/internal/InternalDmxLightShow.g:199:2: The following alternatives can never be matched: 2
3636 [main] INFO text.xtext.generator.XtextGenerator - Generating common infrastructure
3676 [main] ERROR mf.mwe2.launch.runtime.Mwe2Launcher - Problems running workflow mestra.GenerateDmxLightShow:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: XtextGenerator)
org.eclipse.xtext.util.RuntimeIOException: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:263)
at org.eclipse.xtext.generator.AbstractFileSystemAccess2.readTextFile(AbstractFileSystemAccess2.java:45)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.improveCodeQuality(AbstractAntlrGeneratorFragment2.java:222)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.splitParserAndLexerIfEnabled(AbstractAntlrGeneratorFragment2.java:213)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.generateProductionGrammar(XtextAntlrGeneratorFragment2.java:194)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.doGenerate(XtextAntlrGeneratorFragment2.java:156)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.generate(AbstractAntlrGeneratorFragment2.java:109)
at org.eclipse.xtext.xtext.generator.CompositeGeneratorFragment2.generate(CompositeGeneratorFragment2.java:50)
at org.eclipse.xtext.xtext.generator.XtextGenerator.invokeInternal(XtextGenerator.java:230)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:132)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:212)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:37)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:20)
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:78)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.google.common.io.Files$FileByteSource.openStream(Files.java:120)
at com.google.common.io.Files$FileByteSource.read(Files.java:144)
at com.google.common.io.Files.toByteArray(Files.java:248)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:259)
... 18 more
java.lang.RuntimeException: Problems running workflow mestra.GenerateDmxLightShow:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: XtextGenerator)
org.eclipse.xtext.util.RuntimeIOException: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:263)
at org.eclipse.xtext.generator.AbstractFileSystemAccess2.readTextFile(AbstractFileSystemAccess2.java:45)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.improveCodeQuality(AbstractAntlrGeneratorFragment2.java:222)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.splitParserAndLexerIfEnabled(AbstractAntlrGeneratorFragment2.java:213)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.generateProductionGrammar(XtextAntlrGeneratorFragment2.java:194)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.doGenerate(XtextAntlrGeneratorFragment2.java:156)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.generate(AbstractAntlrGeneratorFragment2.java:109)
at org.eclipse.xtext.xtext.generator.CompositeGeneratorFragment2.generate(CompositeGeneratorFragment2.java:50)
at org.eclipse.xtext.xtext.generator.XtextGenerator.invokeInternal(XtextGenerator.java:230)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:132)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:212)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:37)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:20)
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:78)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.google.common.io.Files$FileByteSource.openStream(Files.java:120)
at com.google.common.io.Files$FileByteSource.read(Files.java:144)
at com.google.common.io.Files.toByteArray(Files.java:248)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:259)
... 18 more
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:104)
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:78)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.lang.RuntimeException:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: XtextGenerator)
org.eclipse.xtext.util.RuntimeIOException: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:263)
at org.eclipse.xtext.generator.AbstractFileSystemAccess2.readTextFile(AbstractFileSystemAccess2.java:45)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.improveCodeQuality(AbstractAntlrGeneratorFragment2.java:222)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.splitParserAndLexerIfEnabled(AbstractAntlrGeneratorFragment2.java:213)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.generateProductionGrammar(XtextAntlrGeneratorFragment2.java:194)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.doGenerate(XtextAntlrGeneratorFragment2.java:156)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.generate(AbstractAntlrGeneratorFragment2.java:109)
at org.eclipse.xtext.xtext.generator.CompositeGeneratorFragment2.generate(CompositeGeneratorFragment2.java:50)
at org.eclipse.xtext.xtext.generator.XtextGenerator.invokeInternal(XtextGenerator.java:230)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:132)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:212)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:37)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:20)
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:78)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.io.FileNotFoundException: C:\Users\Michel\Mestra\DmxLightShow\mestra.dmxlightshow\..\mestra.dmxlightshow\src-gen\mestra\parser\antlr\internal\InternalDmxLightShowLexer.java (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.google.common.io.Files$FileByteSource.openStream(Files.java:120)
at com.google.common.io.Files$FileByteSource.read(Files.java:144)
at com.google.common.io.Files.toByteArray(Files.java:248)
at org.eclipse.xtext.generator.JavaIoFileSystemAccess.readTextFile(JavaIoFileSystemAccess.java:259)
... 18 more
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.handleIssues(Mwe2Bridge.java:59)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:51)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:212)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:37)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:20)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
... 4 more
Upvotes: 1
Views: 115
Reputation: 11868
you can change the metamodel as well
TriggersAndCommands:
triggerOrCommand=[TriggerOrCommand];
TriggerOrCommand:
Trigger | Command;
Upvotes: 2
Reputation: 15357
If I name the two possibilities, than the exception does not show:
TriggersAndCommands:
('trigger' trigger=[Trigger]) | ('command' command=[Command]);
However, the 'disadvantage' is the extra 'trigger' and 'command' keywords are needed.
So I consider this as a workaround. I hope others have a better solution. (although in my case it doesn't look that bad to have the extra keywords).
Upvotes: 0