mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 08:48:55 +00:00
[263773] Further improvements to grammar flattener
This commit is contained in:
parent
039a7764c3
commit
70ab3b2602
3 changed files with 43 additions and 2 deletions
|
@ -25,9 +25,14 @@ class GrammarFlatteningTest extends AbstractXtextTests {
|
|||
}
|
||||
|
||||
override Grammar getModel(String model) throws Exception {
|
||||
return getModel(model, false)
|
||||
}
|
||||
|
||||
def Grammar getModel(String model, boolean dropUnreachable) throws Exception {
|
||||
var Grammar grammar = super.getModel(model) as Grammar
|
||||
var RuleNames ruleNames = RuleNames.getRuleNames(grammar, false)
|
||||
var RuleFilter filter = new RuleFilter()
|
||||
filter.discardUnreachableRules = dropUnreachable
|
||||
var Grammar result = FlattenedGrammarProvider.flatten(grammar, ruleNames, filter)
|
||||
var XtextResource resource = get(XtextResource)
|
||||
resource.getContents().add(result)
|
||||
|
@ -272,5 +277,41 @@ class GrammarFlatteningTest extends AbstractXtextTests {
|
|||
terminal RULE_ANY_OTHER:
|
||||
.;'''.toString, serialized)
|
||||
}
|
||||
|
||||
@Test def void test_07() throws Exception {
|
||||
var Grammar flattened = getModel(
|
||||
'''
|
||||
grammar com.foo.bar with org.eclipse.xtext.common.Terminals
|
||||
generate myPack 'http://myURI'
|
||||
Rule<A>: name=ID (<A>child=Rule<!A>)?;
|
||||
''', true)
|
||||
var String serialized = getSerializer().serialize(flattened)
|
||||
assertEquals('''
|
||||
grammar com.foo.bar hidden(RULE_WS, RULE_ML_COMMENT, RULE_SL_COMMENT)
|
||||
|
||||
norm0_Rule:
|
||||
name=RULE_ID;
|
||||
|
||||
terminal RULE_ID:
|
||||
"^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
|
||||
|
||||
terminal RULE_INT:
|
||||
"0".."9"+;
|
||||
|
||||
terminal RULE_STRING:
|
||||
"\"" ("\\" . | !("\\" | "\""))* "\"" | "\'" ("\\" . | !("\\" | "\'"))* "\'";
|
||||
|
||||
terminal RULE_ML_COMMENT:
|
||||
"/*"->"*/";
|
||||
|
||||
terminal RULE_SL_COMMENT:
|
||||
"//" !("\n" | "\r")* ("\r"? "\n")?;
|
||||
|
||||
terminal RULE_WS:
|
||||
" " | "\t" | "\r" | "\n"+;
|
||||
|
||||
terminal RULE_ANY_OTHER:
|
||||
.;'''.toString, serialized)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,5 +16,5 @@ import org.junit.runner.RunWith
|
|||
*/
|
||||
@RunWith(XtextRunner)
|
||||
@InjectWith(FragmentsEagerLinkingInjectorProvider)
|
||||
class FragmentEagerLinkingTest extends AbstractFragmentsTest {
|
||||
class FragmentsEagerLinkingTest extends AbstractFragmentsTest {
|
||||
}
|
|
@ -17,7 +17,7 @@ import org.junit.runners.Suite.SuiteClasses;
|
|||
@RunWith(Suite.class)
|
||||
@SuiteClasses({
|
||||
FragmentsTest.class,
|
||||
FragmentEagerLinkingTest.class,
|
||||
FragmentsEagerLinkingTest.class,
|
||||
FragmentsExTest.class,
|
||||
FragmentsPlainParsingTest.class,
|
||||
FragmentExsPlainParsingTest.class,
|
||||
|
|
Loading…
Reference in a new issue