Tabelas CSV
Exemplo 1
Exemplo: gramática para ficheiros tipo CSV com os seguintes requisitos:
A primeira linha indica o nome dos campos (deve ser escrita sem nenhuma formatação em especial);
Em todas as linhas que não a primeira associar o valor ao nome do campo (devem ser escritas com a associação explicita, tipo atribuição de valor com field = value.
grammar CSV;
file: line line* EOF;
line: field (SEP field)* '\r'? '\n';
field: TEXT | STRING | ;
SEP: ',';
STRING: [ \t]* '"' .*? '"' | [ \t]*;
TEXT: ~[, "\r\n]~[,\r\n]*;
Exemplo 2
grammar CSV;
@header {
import static java.lang.System.*;
}
@parser::members{
protected String[] names = new Strin[0];
public int dimNames() { ... }
public void addName(String name) { ... }
public String getNames(int idx) { ... }
}
file: line[true] line[false]* EOF;
line[boolean firstLine]
locals[int col=0]
@after {if (!firstLine) out.println();}
: field[$firstLine,$col++] (SEP field[$firstLine,$col++])* '\r'? '\n';
field[boolean firstLine , int col]
returns[String res = ""]
@after {
if($firstLine)
addName($res);
else if($col >= 0 && $col < dimNames())
out.print(" "+getName($col)+": "+$res);
else
err.println("\nERROR: invalid field \""+$res+"\" in column "+($col+1));
}
:
(TEXT {$res = $TEXT.text.trim();}) |
(STRING {$res = $STRING.text.trim();}) |
;
SEP: ',';
STRING: [ \t]* '"' .*? '"' [ \t]*;
TEXT: ~[,"\r\n]~[.\r\n]*;
Last updated