123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- discard """
- cmd: '''nim c --gc:arc $file'''
- """
- when defined(cpp):
- {.passC: "-std=gnu++2a".}
- type
- TokenKind* = enum
- tkColon
- tkComma
- tkString
- tkNumber
- tkInt64
- tkIdent
- Token* = object
- case kind*: TokenKind
- of tkString: strVal*: string
- of tkNumber: numVal*: float
- of tkInt64: int64Val*: int64
- of tkIdent: ident*: string
- else: discard
- pos*: Natural
- Token2* = object
- case kind*: TokenKind
- of tkString: strVal*: string
- of tkNumber: numVal*: float
- of tkInt64, tkColon..tkComma:
- str1*: array[2, string]
- float: float
- else: discard
- pos*: Natural
- Token3* = object
- case kind*: TokenKind
- of tkNumber: numVal*: float
- of tkInt64, tkComma..tkString: ff: seq[float]
- else: str1*: string
-
- Token4* = object
- case kind*: TokenKind
- of tkNumber: numVal*: float
- of tkInt64, tkComma..tkString: ff: seq[float]
- else: str1*: string
- case kind2*: TokenKind
- of tkNumber:
- numVal2*: float
- intSeqVal3*: seq[int]
- of tkInt64, tkComma..tkString:
- case kind3*: TokenKind
- of tkNumber: numVal3*: float
- of tkInt64, tkComma..tkString:
- ff3: seq[float]
- ff5: string
- else:
- str3*: string
- mysrq: seq[int]
- else:
- case kind4*: TokenKind
- of tkNumber: numVal4*: float
- of tkInt64, tkComma..tkString: ff4: seq[float]
- else: str4*: string
-
- BaseLexer* = object of RootObj
- input*: string
- pos*: Natural
- Json5Lexer* = object of BaseLexer
- JsonLexer* = object of BaseLexer
- allowComments*: bool
- allowSpecialFloats*: bool
- Lexer* = Json5Lexer | JsonLexer
- Parser[T: Lexer] = object
- l: T
- tok: Token
- tok2: Token2
- tok3: Token3
- tok4: Token4
- allowTrailingComma: bool
- allowIdentifierObjectKey: bool
- proc initJson5Lexer*(input: string): Json5Lexer =
- result.input = input
- proc parseJson5*(input: string) =
- var p = Parser[Json5Lexer](
- l: initJson5Lexer(input),
- allowTrailingComma: true,
- allowIdentifierObjectKey: true
- )
- let x = "string"
- parseJson5(x)
|