Parser
= grammar =
grammar ::= expression { expression }
expression ::= { skipToken } ( string | number | null | bool | array | object )
skipToken ::= Token.SLComment | Token.MLComment | Token.WhiteSpace
string ::= AST.JsStr number ::= AST.JsFloat | AST.JsInt | AST.JsBig
AST.JsStr ::= Token.Str
AST.JsFloat ::= Token.FloatNumber AST.JsInt ::= Token.IntNumber AST.JsBig ::= Token.BigNumber
null ::= Token.Identifier(null) bool ::= Token.Identifier(true) | Token.Identifier(false)
array ::= Token.OpenSuqare expression { Token.Comma expression } [ Token.Comma ] Token.CloseSuqare | Token.OpenSuqare [ Token.Comma ] Token.CloseSuqare
object ::= Token.OpenBrace fieldKeyValue { Token.Comma fieldKeyValue } [ Token.Comma ] Token.CloseSuqare | Token.OpenBrace [ Token.Comma ] Token.CloseSuqare
fieldKeyValue ::= ( fieldName {skipToken} Token.Colon expression )