mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-22 14:36:27 +00:00
103 lines
3.0 KiB
Plaintext
103 lines
3.0 KiB
Plaintext
/*
|
|
* Copyright (C) 2010-2021 JPEXS, All rights reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 3.0 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library.
|
|
*/
|
|
/* Flash assembler language lexer specification */
|
|
package com.jpexs.csv;
|
|
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
import java.io.StringReader;
|
|
%%
|
|
|
|
%public
|
|
%class CsvLexer
|
|
%final
|
|
%unicode
|
|
%ignorecase
|
|
%char
|
|
%line
|
|
%column
|
|
%type CsvRow
|
|
|
|
%{
|
|
|
|
StringBuilder string = new StringBuilder();
|
|
|
|
List<String> currentRow = new ArrayList<>();
|
|
|
|
public CsvLexer(String source){
|
|
this(new StringReader(source));
|
|
}
|
|
|
|
%}
|
|
|
|
LineTerminator = \r|\n|\r\n
|
|
|
|
InputCharacter = [^\r\n]
|
|
Separator = ";"
|
|
|
|
%state STRING
|
|
|
|
%%
|
|
|
|
<YYINITIAL> {
|
|
{Separator} "\"" {
|
|
currentRow.add(string.toString());
|
|
string.setLength(0);
|
|
yybegin(STRING);
|
|
}
|
|
{Separator} {
|
|
currentRow.add(string.toString());
|
|
string.setLength(0);
|
|
}
|
|
{LineTerminator} {
|
|
currentRow.add(string.toString());
|
|
string.setLength(0);
|
|
CsvRow ret = new CsvRow(currentRow);
|
|
currentRow = new ArrayList<>();
|
|
return ret;
|
|
}
|
|
. {string.append(yytext());}
|
|
}
|
|
|
|
<STRING> {
|
|
\"\" {
|
|
string.append("\"");
|
|
}
|
|
\" {
|
|
yybegin(YYINITIAL);
|
|
}
|
|
. {string.append(yytext());}
|
|
}
|
|
|
|
/* error fallback */
|
|
[^] { }
|
|
<<EOF>> {
|
|
if (string == null) {
|
|
return null;
|
|
}
|
|
if (currentRow.isEmpty() && string.length() == 0) {
|
|
string = null;
|
|
return null;
|
|
}
|
|
currentRow.add(string.toString());
|
|
string.setLength(0);
|
|
CsvRow ret = new CsvRow(currentRow);
|
|
currentRow = new ArrayList<>();
|
|
string = null;
|
|
return ret;
|
|
}
|