mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
Merge pull request #715 from eclipse/sz/grammarGenFixes
A few fixes for the Antlr generator 2
This commit is contained in:
commit
b3a4d042c1
3 changed files with 20 additions and 16 deletions
|
@ -49,12 +49,12 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
|
||||
@Inject CodeConfig codeConfig
|
||||
|
||||
protected KeywordHelper keyWordHelper
|
||||
protected KeywordHelper keywordHelper
|
||||
|
||||
Grammar originalGrammar
|
||||
|
||||
def generate(Grammar it, AntlrOptions options, IXtextGeneratorFileSystemAccess fsa) {
|
||||
this.keyWordHelper = KeywordHelper.getHelper(it)
|
||||
this.keywordHelper = KeywordHelper.getHelper(it)
|
||||
this.originalGrammar = it
|
||||
val RuleFilter filter = new RuleFilter();
|
||||
filter.discardUnreachableRules = options.skipUnusedRules
|
||||
|
@ -136,7 +136,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
«IF options.isBacktrackLexer»
|
||||
tokens {
|
||||
«FOR kw : allKeywords.sort.sortBy[length]»
|
||||
«keyWordHelper.getRuleName(kw)»;
|
||||
«keywordHelper.getRuleName(kw)»;
|
||||
«ENDFOR»
|
||||
«FOR rule: allTerminalRules»
|
||||
«rule.ruleName»;
|
||||
|
@ -198,7 +198,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
«IF options.isBacktrackLexer»
|
||||
SYNTHETIC_ALL_KEYWORDS :
|
||||
«FOR kw: allKeywords.indexed»
|
||||
(FRAGMENT_«keyWordHelper.getRuleName(kw.value)»)=> FRAGMENT_«keyWordHelper.getRuleName(kw.value)» {$type = «keyWordHelper.getRuleName(kw.value)»; }
|
||||
(FRAGMENT_«keywordHelper.getRuleName(kw.value)»)=> FRAGMENT_«keywordHelper.getRuleName(kw.value)» {$type = «keywordHelper.getRuleName(kw.value)»; }
|
||||
«IF kw.key != allKeywords.size || !allTerminalRules().isEmpty»|«ENDIF»
|
||||
«ENDFOR»
|
||||
«FOR rule : allTerminalRules.indexed»
|
||||
|
@ -209,7 +209,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
«ENDFOR»
|
||||
;
|
||||
«FOR kw: allKeywords»
|
||||
fragment FRAGMENT_«keyWordHelper.getRuleName(kw)» : '«kw.toAntlrString()»';
|
||||
fragment FRAGMENT_«keywordHelper.getRuleName(kw)» : '«kw.toAntlrString()»';
|
||||
«ENDFOR»
|
||||
«ELSE»
|
||||
«FOR rule:allKeywords»
|
||||
|
@ -254,12 +254,16 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
«ENDIF»
|
||||
'''
|
||||
|
||||
protected def dispatch compileRule(String keyWord, Grammar grammar, AntlrOptions options) '''
|
||||
«keyWordHelper.getRuleName(keyWord)» : «keyWord.toAntlrKeyWordRule(options)»;
|
||||
protected def dispatch compileRule(String keyword, Grammar grammar, AntlrOptions options) '''
|
||||
«keywordHelper.getRuleName(keyword)» : «keyword.toAntlrKeywordRule(options)»;
|
||||
'''
|
||||
|
||||
protected def toAntlrKeyWordRule(String keyWord, AntlrOptions options) {
|
||||
"'" + if (options.ignoreCase) keyWord.toAntlrStringIgnoreCase else keyWord.toAntlrString + "'"
|
||||
protected def toAntlrKeywordRule(String keyword, AntlrOptions options) {
|
||||
if (options.ignoreCase) {
|
||||
return keyword.toAntlrStringIgnoreCase
|
||||
} else {
|
||||
return "'" + keyword.toAntlrString + "'"
|
||||
}
|
||||
}
|
||||
|
||||
protected def shouldBeSkipped(TerminalRule it, Grammar grammar) {
|
||||
|
@ -321,7 +325,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
'''
|
||||
|
||||
protected dispatch def String dataTypeEbnf2(Keyword it, boolean supportActions) {
|
||||
if (combinedGrammar) "'" + value.toAntlrString + "'" else keyWordHelper.getRuleName(value)
|
||||
if (combinedGrammar) "'" + value.toAntlrString + "'" else keywordHelper.getRuleName(value)
|
||||
}
|
||||
|
||||
protected dispatch def String dataTypeEbnf2(RuleCall it, boolean supportActions) {
|
||||
|
@ -351,7 +355,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
}
|
||||
|
||||
protected dispatch def String ebnf2(Keyword it, AntlrOptions options, boolean supportActions) {
|
||||
if (combinedGrammar) "'" + value.toAntlrString + "'" else keyWordHelper.getRuleName(value)
|
||||
if (combinedGrammar) "'" + value.toAntlrString + "'" else keywordHelper.getRuleName(value)
|
||||
}
|
||||
|
||||
protected dispatch def String ebnf2(RuleCall it, AntlrOptions options, boolean supportActions) {
|
||||
|
@ -359,7 +363,7 @@ abstract class AbstractAntlrGrammarGenerator {
|
|||
}
|
||||
|
||||
protected dispatch def String ebnf2(EnumLiteralDeclaration it, AntlrOptions options, boolean supportActions) {
|
||||
if (combinedGrammar) "'" + literal.value.toAntlrString + "'" else keyWordHelper.getRuleName(literal.value)
|
||||
if (combinedGrammar) "'" + literal.value.toAntlrString + "'" else keywordHelper.getRuleName(literal.value)
|
||||
}
|
||||
|
||||
protected dispatch def String crossrefEbnf(AbstractElement it, CrossReference ref, boolean supportActions) {
|
||||
|
|
|
@ -44,7 +44,7 @@ class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWithActions
|
|||
|
||||
{
|
||||
«FOR kw: allKeywords.sort.sortBy[-length]»
|
||||
tokenNameToValue.put("«keyWordHelper.getRuleName(kw)»", "'«kw.toJavaIdentifier(false).replaceAll("\\\\\\$", "\\\\u0024")»'");
|
||||
tokenNameToValue.put("«keywordHelper.getRuleName(kw)»", "'«kw.toJavaIdentifier(false).replaceAll("\\\\\\$", "\\\\u0024")»'");
|
||||
«ENDFOR»
|
||||
}
|
||||
«ENDIF»
|
||||
|
|
|
@ -80,16 +80,16 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 {
|
|||
override protected doGenerate() {
|
||||
new KeywordHelper(grammar, options.ignoreCase, grammarUtil)
|
||||
new CombinedGrammarMarker(isCombinedGrammar).attachToEmfObject(grammar)
|
||||
if (debugGrammar)
|
||||
generateDebugGrammar
|
||||
generateProductionGrammar
|
||||
if (projectConfig.genericIde.srcGen != null)
|
||||
generateContentAssistGrammar
|
||||
if (debugGrammar)
|
||||
generateDebugGrammar
|
||||
|
||||
generateProductionParser.writeTo(projectConfig.runtime.srcGen)
|
||||
generateAntlrTokenFileProvider.writeTo(projectConfig.runtime.srcGen)
|
||||
generateContentAssistParser.writeTo(projectConfig.genericIde.srcGen)
|
||||
if (!isCombinedGrammar) {
|
||||
if (!isCombinedGrammar && grammar.allTerminalRules().exists[ isSyntheticTerminalRule ]) {
|
||||
generateProductionTokenSource.writeTo(projectConfig.runtime.srcGen)
|
||||
generateContentAssistTokenSource.writeTo(projectConfig.genericIde.srcGen)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue