Using the Xtext.xtext grammar in another DSL gives "Couldn't resolve reference to EClassifier&q [message #1841797] |
Sun, 30 May 2021 09:39  |
M D Messages: 33 Registered: January 2021 |
Member |
|
|
I'm developing a DSL that uses Xtext's own grammar. Thus, it is possible to define Xtext grammar rules in the DSL to use. Xtext grammar rules are defined in the rule "Rule", which is defined as follows.
Rule:
'{'
'"name"' ':' '{'
'"column"' ':' nameColumn = INT ','
'"row"' ':' nameRow = INT ','
'"value"' ':' name = STRING_WITH_TOKENS
'}' ','
'"rule"' ':' '{'
'"column"' ':' ruleColumn = INT ','
'"row"' ':' ruleRow = INT ','
'"value"' ':' '"' rule = AbstractRule '"'
'}'
'}'
;
AbstractRule: ParserRule | TerminalRule | EnumRule;
Thus, rule = AbstractRule is what starts the use of the Xtext grammar. This means the following is not included from the original Xtext grammar:
Grammar:
'grammar' name=GrammarID ('with' usedGrammars+=[Grammar|GrammarID] (',' usedGrammars+=[Grammar|GrammarID])*)?
(definesHiddenTokens?='hidden' '(' (hiddenTokens+=[AbstractRule|RuleID] (',' hiddenTokens+=[AbstractRule|RuleID])*)? ')')?
metamodelDeclarations+=AbstractMetamodelDeclaration*
(rules+=AbstractRule)+
;
GrammarID returns ecore::EString:
ValidID ('.' ValidID)*;
Only smalls things have been changed in the original Xtext grammar such as the RuleNameAndParams using name to cross-reference to a Rule instead of a cross-refrence to a ValidID.
fragment RuleNameAndParams returns ParserRule:
name=[Rule] ('<' (parameters+=Parameter (',' parameters+=Parameter)*)? '>')?
;
import "http://www.eclipse.org/2008/Xtext" is not included in the beginning as it gives error. And terminals is not imported, but defined directly in the grammar.
Right now it works defining basic Xtext grammar rules. But creating a rule such as "Exp returns Expression: Factor (('+' {Plus.left=current} | '-' {Minus.left=current}) right=Factor)*;" gives an "Couldn't resolve reference to EClassifier 'Expression'".
I do not know if any of this can cause the error. I'm a bit lost about what causes the error.
[Updated on: Sun, 30 May 2021 09:45] Report message to a moderator
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02011 seconds