introduced 'ANY_OTHER' lexer rule which acts as catch-all for any character which can not be matched by any other lexer rule. this makes error handling easier because the handling can be done based on tokens.

This commit is contained in:
sefftinge 2008-05-14 12:29:31 +00:00
parent 0a12567cdd
commit 09edb8e3e1
4 changed files with 3 additions and 5 deletions

View file

@ -113,7 +113,7 @@ isAssigned(Object this) : false;
// Built-in lexer Rules
cached allLexerRules(Grammar this) :
lexerRules.union(builtinRules().select(e|lexerRules.forAll(e1|e1.name != e.name)));
lexerRules.union(builtinRules().select(e|lexerRules.forAll(e1|e1.name != e.name))).union({lr('ANY_OTHER','.')}).toList().sortBy(e|e.name=='ANY_OTHER'?1:0);
private create LexerRule lr(String name, String body) :

View file

@ -16,8 +16,6 @@ import xtextutil;
extension org::eclipse::xtext::Extensions;
extension org::eclipse::xtext::TypeResolution;
context Action ERROR "Created class " + typeName.name + " cannot be resolved" :
resolveCreatedType() != null;

View file

@ -43,7 +43,7 @@ public class XtextGrammarTest extends AbstractGeneratorTest {
assertEquals("set(name,[@6,19:21='Foo',<4>,1:19])", iter.next().toString());
assertEquals("create(Assignment)", iter.next().toString());
assertEquals("set(feature,[@10,25:28='name',<4>,1:25])", iter.next().toString());
assertEquals("set(operator,[@11,29:29='=',<24>,1:29])", iter.next().toString());
assertEquals("set(operator,[@11,29:29='=',<25>,1:29])", iter.next().toString());
assertEquals("create(RuleCall)", iter.next().toString());
assertEquals("set(name,[@12,30:31='ID',<4>,1:30])", iter.next().toString());
assertEquals("set(terminal,RuleCall)", iter.next().toString());

View file

@ -21,7 +21,7 @@ public class ParseErrorHandlingTest extends AbstractGeneratorTest {
errors.add(text);
}
});
//TODO assertEquals("%",errors.get(0));
assertEquals("%",errors.get(0));
assertEquals(1, errors.size());
}
}