Ich versuche, eine Grammatik für das folgende Beispiel csv zu finden:Probleme eine csv Grammatik zu finden, wo Zellen haben eine besondere Bedeutung
a; test;test ;
;a; test;test ;
<ignore>; <ignore> ;test
a; <ignore> test;test
a; this is test ;test
Das Semikolon als Trennzeichen verwendet wird. Zellen, die nur den Text <ignore>
enthalten, haben eine besondere Bedeutung und sollten im EMF-Modell durch einen eigenen Typ dargestellt werden. <igonore> test
ist jedoch kein solcher besonderer Wert. Die Leerzeichen um Semikolons müssen ignoriert werden. Zellen dürfen beliebige Zeichen außer dem Semikolon enthalten.
Bisher habe ich mit dieser Grammatik kommen:
grammar com.example.Csv
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate impEx "http://www.example.com/Csv
Model:
valueLine=ValueLine
ValueLine:
';'? WHITE_SPACE values+=Value WHITE_SPACE (';' WHITE_SPACE values+=Value WHITE_SPACE)* ';'*;
Value:
((=>'<ignore>') {IGNORE_VALUE} IGNORE_VALUE) | text=TEXT_VALUE;
terminal TEXT_VALUE:
(!';')*;
IGNORE_VALUE:
'<ignore>';
WHITE_SPACE:
(' '|'\t')*;
Aber mein Testfall mit
@InjectWith(CsvInjectorProvider.class)
@RunWith(XtextRunner.class)
public class ParserTest {
@Inject
private ParseHelper<Model> parser;
@Test
public void parseDomainmodel() throws Exception {
Model parsed = parser.parse("abc; <ignore>; <ignore> \t; <ignore> a;def");
System.out.println(parsed.getValueLine().getValues());
}
}
Ich sehe, dass die IGNORE_VALUE
Regel nicht <ignore>
überein. Der Parser scheint die TEXT_VALUE
-Regel für den Start-Whitespace zu verwenden.
Was muss ich tun, um die <ignore>
Werte richtig zu analysieren?