2012-04-03 4 views
2

ich in schriftlicher Form Grammatiken nicht super erfahrenen bin, aber lassen Sie uns sagen, dass ich einen Plattentyp wie diese haben: (Beispiele)Schreibe eine ParseKit Grammatik mit einer variierenden Anzahl von Feldern (in der Reihenfolge)

record # 1 source ages params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3; 
record # 2; 
record # 3 source ages; 
record # 4 params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3; 
record # 5 source ages fields are A, B, C with values 1, 2, 3; 
record # 6 with values 1, 2, 3; 

Grundsätzlich :

  1. Muss mit "record # Number" beginnen und mit einem Semikolon enden.
  2. Kann enthalten 0 oder 1 Captures in der folgenden Reihenfolge:
  3. Quelldatenmenge
  4. Parameter des Datensatzes
  5. Felder aus Dataset
  6. Werte von Dataset

Hier ist meine Grammatik, ist es nicht funktioniert:

--- Start Grammatik:

@start = record; 

record = 'record' '#' numeric rest* ';'; 
rest = 'source' alphanumeric paramsAndOrFieldsAndOrWithValues*; 
paramsAndOrFieldsAndOrWithValues = (paramsList)? (fieldsList)? (valuesList)?; 
paramsList = 'params' alpha expr numeric ('and' alpha expr numeric)*; 
fieldsList = 'fields' 'are' alpha (comma alpha)*; 
valuesList = 'with' 'values' numeric (comma numeric)*; 


alpha = Word; 
numeric = Number; 
alphanumeric = (alpha | numeric | '_' | '.'); 
comma = ','; 
expr = '='; 

--- Ende Grammatik

@ "Entwickler von ParseKit", können Sie mir bitte helfen?

Thanks :)

Antwort

1

Entwickler von ParseKit hier.

Ihre Grammatik ist ein wenig aus. Ich habe eine Grammatik ausgearbeitet, die Ihrer Beispieleingabe entspricht. Ich habe dies mit dem Ziel DebugApp ausgeführt und kann bestätigen, dass es für Ihr Beispiel funktioniert.

@start = records; 
records = record+; 
record = prefix source? params? fields? values? suffix; 

prefix = 'record' '#' Number; 
suffix = ';'; 

// source 
source = 'source' Word; 

// params 
params = 'params' expr ('and' expr)*; 
expr = name '=' Number; 
name = Word; 

// fields 
fields = 'fields' 'are' name (',' name)*; 

// values 
values = 'with' 'values' val (',' val)*; 

val = Number; 
+0

Datensatz # 1 Quelle hallo Felder sind A, B, C; kann Felder nicht analysieren, keine Idee, warum? mit deiner Grammatik –

+0

Hm, das funktioniert hier für mich gegen meine Grammatik. Hier ist ein Ausdruck von meinem Datensatz Rückruf: '- [DebugAppDelegate Parser: didMatchRecord:] [Datensatz, #, 1, Quelle, hallo, Felder, sind, A, ,, B, ,, C,;] record/#/1/source/hallo/fields/sind/A /,/B /,/C /;^' –

+0

Seltsam, in der" ParseKit Demo "zeigt es nicht die" Felder "Zweig/Baum ... möglicherweise ein Fehler in die PK Demo App? Hier ist ein Screenshot: http://imgur.com/bjb10 –

Verwandte Themen