Parser

object 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 )

class Object
trait Matchable
class Any
Parser.type

Type members

Classlikes

trait ArrayOps
trait ObjOps
enum State

Value members

Concrete methods

def accept(state: State, token: Token): Either[ParserError, (State, Option[AST])]

Парсинг по одной лексеме за один раз

Парсинг по одной лексеме за один раз

Value parameters:
state

текущее состояние парсера

token

лексема

Returns:

Или ошибка - не соответствие грамматике Или новое состояние + возможно распознанный элемент Json

def parse(tokenSource: Iterator[Token]): Either[ParserError, AST]
def parse(source: String): Either[ParserError, AST]
def parse(source: Reader): Either[ParserError, AST]
def parseSeq(tokens: Seq[Token]): Either[ParserError, (AST, Seq[Token])]

Extensions

Extensions

extension (parentOpt: Option[State])
def acceptArray(s: State, token: Token, value: List[AST]): Either[ParserError, (State, Option[AST])]
def acceptObject(state: State, token: Token, value: List[(String, AST)]): Either[ParserError, (State, Option[AST])]