0

文法を定義する単一の xtext ファイルを使用して、プロジェクト内の他のファイルを変更せずに、新しい XText プロジェクトを作成しました。私が定義した文法は約 150 行かかり、「言語インフラストラクチャを生成」しようとするとすべてがスムーズに進みましたが、少し拡張したところ、インフラストラクチャの生成が失敗しました。

460476 [main] ERROR mf.mwe2.launch.runtime.Mwe2Launcher  - Java heap space
java.lang.OutOfMemoryError: Java heap space
    at java.util.ArrayList.iterator(Unknown Source)
    at org.eclipse.xtext.util.formallang.PdaUtil$TraversalItem.<init>(PdaUtil.java:247)
    at org.eclipse.xtext.util.formallang.PdaUtil.newItem(PdaUtil.java:531)
    at org.eclipse.xtext.util.formallang.PdaUtil.filterEdges(PdaUtil.java:451)
    at org.eclipse.xtext.serializer.analysis.ContextTypePDAProvider.createPDA(ContextTypePDAProvider.java:178)
    at org.eclipse.xtext.serializer.analysis.ContextTypePDAProvider.getContextTypePDA(ContextTypePDAProvider.java:188)
    at org.eclipse.xtext.serializer.analysis.SyntacticSequencerPDAProvider.getPDA(SyntacticSequencerPDAProvider.java:604)
    at org.eclipse.xtext.generator.serializer.SyntacticSequencerUtil.getAllPDAs(SyntacticSequencerUtil.java:59)
    at org.eclipse.xtext.generator.serializer.SyntacticSequencerUtil.getAllAmbiguousTransitions(SyntacticSequencerUtil.java:79)
    at org.eclipse.xtext.generator.serializer.SyntacticSequencerUtil.getAllAmbiguousTransitionsBySyntax(SyntacticSequencerUtil.java:90)
    at org.eclipse.xtext.generator.serializer.AbstractSyntacticSequencer.getFileContents(AbstractSyntacticSequencer.java:95)
    at org.eclipse.xtext.generator.serializer.SerializerFragment.generate(SerializerFragment.java:97)
    at org.eclipse.xtext.generator.Xtend2GeneratorFragment.generate(Xtend2GeneratorFragment.java:66)
    at org.eclipse.xtext.generator.Xtend2GeneratorFragment.generate(Xtend2GeneratorFragment.java:59)
    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)

そのアクションの Eclipse 構成で自分の起動設定を確認したところ、それまでは-Xmx512m. その数を増やそうとしましたが、同じエラーでクラッシュするまでにアクションに時間がかかるようになりました。-Xmx3000m4Gb マシンでこれ以上試したくありませんでした。

私が行ったことは、新しい XText プロジェクトを作成し、デフォルトの "Hello X!" を変更しただけであることを強調しておきます。私自身の200行の文法定義による文法。私の文法は問題なくコンパイルされ、警告やエラーは発生しません。このメモリ エラーが発生した原因は何ですか?どうすれば修正できますか?

この関連するブログ投稿を見つけましたが、そこに提案されている修正が私のレベルを超えていることは認めます。正確に何をする必要があるのか​​ 、問題がまったく修正されるのかどうかはわかりません.

4

1 に答える 1

0

私は最終的に問題を絞り込むことができました:

Datatype:
  Rule1 '=' Rule2 Rule3 INT Rule4 etc etc...

メモリ不足で失敗しました。その間

Datatype:
  name=Rule1 '=' Rule2 Rule3 INT Rule4 etc etc...

オリジナルでも問題なく動作し-Xmx512mます。name唯一の違いは、ルールの 1 つにa を割り当てることです。ルールに名前を付けることがそれほど重要であることに気づきませんでした。構文的に正しい DSL ファイルだけを気にし、それ以上処理するつもりがない場合は、ほとんど省略できると思っていましたが、間違っていたと思います...

于 2012-07-19T10:23:13.437 に答える