package org.simantics.scl.compiler.internal.parsing.parser;
+import org.simantics.scl.compiler.compilation.CompilationContext;
import org.simantics.scl.compiler.internal.parsing.Token;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;
TIntArrayList stateStack = new TIntArrayList(2);
StringBuffer string = new StringBuffer();
+ CompilationContext context;
private Token sym(int id) {
return new Token(id, yychar, yychar+yylength(), yytext());
private Token sym(int id, String text) {
return new Token(id, yychar, yychar+yylength(), text);
}
+ public void setCompilationContext(CompilationContext context) {
+ this.context = context;
+ }
+ public boolean supportCHR() {
+ return context.header == null ? false : context.header.chr;
+ }
%}
letter = [a-zA-Z_]
else { return sym(SCLTerminals.ELSE); }
where { return sym(SCLTerminals.WHERE); }
when { return sym(SCLTerminals.WHEN); }
- rule { return sym(SCLTerminals.RULE); }
+ ruleset { return sym(supportCHR() ? SCLTerminals.RULESET : SCLTerminals.ID); }
+ rule { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.RULE); }
abstract{whitespace}rule { return sym(SCLTerminals.ABSTRACT_RULE); }
extends { return sym(SCLTerminals.EXTENDS); }
mapping{whitespace}relation { return sym(SCLTerminals.MAPPING_RELATION); }
- transformation { return sym(SCLTerminals.TRANSFORMATION); }
+ transformation { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.TRANSFORMATION); }
select{whitespace}first { return sym(SCLTerminals.SELECT_FIRST); }
select{whitespace}distinct { return sym(SCLTerminals.SELECT_DISTINCT); }
select { return sym(SCLTerminals.SELECT); }