54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
|
|
import { LLSDTokenGenerator } from './LLSDTokenGenerator';
|
||
|
|
import { LLSDTokenType } from './LLSDTokenType';
|
||
|
|
import { LLSDNotationParser } from './LLSDNotationParser';
|
||
|
|
import { LLSDType } from './LLSDType';
|
||
|
|
|
||
|
|
export class LLSDArray
|
||
|
|
{
|
||
|
|
public static parse(gen: LLSDTokenGenerator): LLSDType[]
|
||
|
|
{
|
||
|
|
const arr: LLSDType[] = [];
|
||
|
|
let value: LLSDType | undefined = undefined;
|
||
|
|
while (true)
|
||
|
|
{
|
||
|
|
const token = gen();
|
||
|
|
if (token === undefined)
|
||
|
|
{
|
||
|
|
throw new Error('Unexpected end of input in array');
|
||
|
|
}
|
||
|
|
switch (token.type)
|
||
|
|
{
|
||
|
|
case LLSDTokenType.WHITESPACE:
|
||
|
|
{
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
case LLSDTokenType.ARRAY_END:
|
||
|
|
{
|
||
|
|
if (value !== undefined)
|
||
|
|
{
|
||
|
|
arr.push(value);
|
||
|
|
}
|
||
|
|
return arr;
|
||
|
|
}
|
||
|
|
case LLSDTokenType.COMMA:
|
||
|
|
{
|
||
|
|
if (value === undefined)
|
||
|
|
{
|
||
|
|
throw new Error('Expected value before comma');
|
||
|
|
}
|
||
|
|
arr.push(value);
|
||
|
|
value = undefined;
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (value !== undefined)
|
||
|
|
{
|
||
|
|
throw new Error('Comma or end brace expected');
|
||
|
|
}
|
||
|
|
|
||
|
|
value = LLSDNotationParser.parseValueToken(gen, token);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|