von 0.0.0

Virtual Object Notation
Documentation
@export
VonParser = value:ValueNode $;

ValueNode =
	@:TableNode |
	@:SpecialNode |
	@:NumberNode |
	@:StringNode
	;

TableNode = [hint:IdentifierNode] '(' {items:TableItem} ')' ;

TableItem =
	@:KeyValueNode |
	@:ValueNode |
	@:Split
	;

KeyValueNode = key:KeyNode ':' value:ValueNode;

@position
KeyNode =
	@:IdentifierNode |
	@:StringNode
	;

@position
StringNode = [hint:IdentifierNode] '\"' '\"';

@position
@no_skip_ws
NumberNode = num:Num [hint:IdentifierNode];

@string
@position
@no_skip_ws
Num = {'0'..'9'}+ [Dot {'0'..'9'}+];

@position
NamespaceNode = path:IdentifierNode {Dot path:IdentifierNode};

@string
@position
@no_skip_ws
IdentifierNode = (XID_START | '_') {XID_CONTINUE};

@string
@position
SpecialNode = 'null' | 'default' | 'true' | 'false';


@char
@check(unicode_ident::is_xid_start)
XID_START = char;

@char
@check(unicode_ident::is_xid_continue)
XID_CONTINUE = char;

@char
Dot = '.' | '。';

@char
Split = ';' | ',' | ',';