Skip to content

Commit 6af61fe

Browse files
committed
rename Lexer and Token for both json and yaml modules
Signed-off-by: George Lemon <georgelemon@protonmail.com>
1 parent 8ad5084 commit 6af61fe

2 files changed

Lines changed: 54 additions & 54 deletions

File tree

src/openparser/json.nim

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ type
4949
# JSON JsonParser
5050
#
5151
JsonTokenKind* = enum
52-
## Token kinds for JSON parsing
52+
## JsonToken kinds for JSON parsing
5353
jtkEof = "<EOF>"
5454
jtkLBrace = "{"
5555
jtkRBrace = "}"
@@ -63,22 +63,22 @@ type
6363
jtkFalse = "<false>"
6464
jtkNull = "<null>"
6565

66-
Lexer = ref object
66+
JsonLexer = ref object
6767
input: string
6868
data: ptr UncheckedArray[char]
6969
len: int
7070
pos: int
7171
line, col: int
7272
current: char
7373

74-
Token* = ref object
74+
JsonToken* = ref object
7575
kind*: JsonTokenKind
7676
value*: string
7777
line*, col*, pos*: int
7878

7979
JsonParser* = object
80-
lexer: Lexer
81-
prev*, curr*, next*: Token
80+
lexer: JsonLexer
81+
prev*, curr*, next*: JsonToken
8282
currentField*: Option[string] # for context-aware parseHooks
8383
## The name of the current field being parsed, if applicable. This is set
8484
## before calling parseHook for a field value, allowing parseHooks to have
@@ -97,11 +97,11 @@ const
9797
unexpectedTokenExpected = "Got `$1`, expected $2"
9898
unexpectedChar = "Unexpected character `$1`"
9999

100-
proc charAt(l: Lexer, idx: int): char {.inline.} =
100+
proc charAt(l: JsonLexer, idx: int): char {.inline.} =
101101
if idx < 0 or idx >= l.len: return '\0'
102102
if l.data != nil: l.data[idx] else: l.input[idx]
103103

104-
proc getContext(l: Lexer, posOverride: int = -1): string =
104+
proc getContext(l: JsonLexer, posOverride: int = -1): string =
105105
# Show the full current line and place caret at exact token position.
106106
let rawPos = if posOverride >= 0: posOverride else: l.pos
107107
let atPos = max(0, min(rawPos, l.len))
@@ -125,7 +125,7 @@ proc getContext(l: Lexer, posOverride: int = -1): string =
125125
let markerPos = max(0, min(snippet.len, atPos - lineStart))
126126
result = snippet & "\n" & " ".repeat(markerPos) & "^"
127127

128-
proc error(l: var Lexer, msg: string) =
128+
proc error(l: var JsonLexer, msg: string) =
129129
# Raise a lexer error
130130
let context = getContext(l)
131131
raise newException(OpenParserJsonError, ("\n" & context & "\n" & "Error ($1:$2) " % [$l.line, $l.col]) & msg)
@@ -524,25 +524,25 @@ proc arrayToJson*(v, valImpl: NimNode, opts: JsonOptions = nil): NimNode =
524524
move(str) # return the JSON string
525525

526526
#
527-
# Lexer API
527+
# JsonLexer API
528528
#
529-
proc `$`(tk: Token): string =
530-
## Convert Token to string
529+
proc `$`(tk: JsonToken): string =
530+
## Convert JsonToken to string
531531
result = "TOKEN<kind: " & $tk.kind &
532532
(if tk.value.len > 0: ", value:" & tk.value else: "") &
533533
", line:" & $tk.line & ", col:" & $tk.col & ">"
534534

535-
proc nextToken(parser: var JsonParser): Token {.discardable.}
535+
proc nextToken(parser: var JsonParser): JsonToken {.discardable.}
536536

537-
proc newLexer(input: string): Lexer =
538-
result = Lexer(input: input, data: nil, len: input.len, pos: 0, line: 1, col: 1)
537+
proc newJsonLexer(input: string): JsonLexer =
538+
result = JsonLexer(input: input, data: nil, len: input.len, pos: 0, line: 1, col: 1)
539539
result.current = result.charAt(0)
540540

541-
proc newLexer(mem: pointer, size: int): Lexer =
542-
result = Lexer(data: cast[ptr UncheckedArray[char]](mem), len: size, pos: 0, line: 1, col: 1)
541+
proc newJsonLexer(mem: pointer, size: int): JsonLexer =
542+
result = JsonLexer(data: cast[ptr UncheckedArray[char]](mem), len: size, pos: 0, line: 1, col: 1)
543543
result.current = result.charAt(0)
544544

545-
proc advance(l: var Lexer) =
545+
proc advance(l: var JsonLexer) =
546546
if l.pos < l.len - 1:
547547
inc l.pos
548548
l.current = l.charAt(l.pos)
@@ -551,7 +551,7 @@ proc advance(l: var Lexer) =
551551
l.pos = l.len
552552
l.current = '\0'
553553

554-
proc matchKeyword(l: var Lexer, kw: string): bool =
554+
proc matchKeyword(l: var JsonLexer, kw: string): bool =
555555
if l.pos + kw.len > l.len: return false
556556
for i, c in kw:
557557
if l.charAt(l.pos + i) != c:
@@ -560,7 +560,7 @@ proc matchKeyword(l: var Lexer, kw: string): bool =
560560
advance(l)
561561
result = true
562562

563-
proc skipWhitespace(l: var Lexer) =
563+
proc skipWhitespace(l: var JsonLexer) =
564564
while true:
565565
case l.current
566566
of {' ', '\t', '\n', '\r'}:
@@ -570,7 +570,7 @@ proc skipWhitespace(l: var Lexer) =
570570
advance(l)
571571
else: break
572572

573-
proc readString(l: var Lexer): string =
573+
proc readString(l: var JsonLexer): string =
574574
result = ""
575575
while true:
576576
case l.current
@@ -611,7 +611,7 @@ proc readString(l: var Lexer): string =
611611
result.add(l.current)
612612
advance(l)
613613

614-
proc readNumber(l: var Lexer): string =
614+
proc readNumber(l: var JsonLexer): string =
615615
result = ""
616616
if l.current == '-':
617617
result.add('-')
@@ -639,10 +639,10 @@ proc readNumber(l: var Lexer): string =
639639
#
640640
# JSON Parsing implementation to Nim objects
641641
#
642-
proc nextToken(parser: var JsonParser): Token =
642+
proc nextToken(parser: var JsonParser): JsonToken =
643643
# Get the next token from the lexer
644644
skipWhitespace(parser.lexer)
645-
result = Token(
645+
result = JsonToken(
646646
line: parser.lexer.line,
647647
col: parser.lexer.col,
648648
pos: parser.lexer.pos
@@ -708,7 +708,7 @@ proc parseHook*[T: Integers](parser: var JsonParser, v: var T)
708708
proc parseHook*[T: tuple](parser: var JsonParser, v: var T)
709709
proc skipValue*(parser: var JsonParser)
710710

711-
proc advance*(parser: var JsonParser): Token {.discardable.} =
711+
proc advance*(parser: var JsonParser): JsonToken {.discardable.} =
712712
# Advance to the next token and return it
713713
parser.prev = parser.curr
714714
parser.curr = parser.next
@@ -1121,7 +1121,7 @@ proc parseArray(parser: var JsonParser, arr: var JsonNode) =
11211121
parser.error(unexpectedToken % [$token.kind])
11221122
parser.advance() # consume the closing ']'
11231123

1124-
proc initParser(lexer: Lexer): JsonParser =
1124+
proc initParser(lexer: JsonLexer): JsonParser =
11251125
result = JsonParser(lexer: lexer)
11261126
result.curr = result.nextToken()
11271127
result.next = result.nextToken()
@@ -1154,22 +1154,22 @@ proc parseAnyRootL(parser: var JsonParser): JsonNode =
11541154

11551155
proc fromJson*(str: string): JsonNode =
11561156
## Parse a JSON from `str` and returns the standard `JsonNode`
1157-
var parser = initParser(newLexer(str))
1157+
var parser = initParser(newJsonLexer(str))
11581158
result = parseAnyRoot(parser)
11591159

11601160
proc fromJsonL*(str: string): JsonNode =
11611161
## Parse line-delimited JSON from `str` and returns a `JsonNode` array
1162-
var parser = initParser(newLexer(str))
1162+
var parser = initParser(newJsonLexer(str))
11631163
result = parseAnyRootL(parser)
11641164

11651165
proc fromJson*(mapped: MemFile): JsonNode =
11661166
## Parse JSON directly from mapped memory.
1167-
var parser = initParser(newLexer(mapped.mem, mapped.size))
1167+
var parser = initParser(newJsonLexer(mapped.mem, mapped.size))
11681168
result = parseAnyRoot(parser)
11691169

11701170
proc fromJsonL*(mapped: MemFile): JsonNode =
11711171
## Parse line-delimited JSON directly from mapped memory.
1172-
var parser = initParser(newLexer(mapped.mem, mapped.size))
1172+
var parser = initParser(newJsonLexer(mapped.mem, mapped.size))
11731173
result = parseAnyRootL(parser)
11741174

11751175
proc fromJsonFile*(filename: string): JsonNode =
@@ -1214,7 +1214,7 @@ macro fromJsonMacro(x: typed, str: typed): untyped =
12141214
add blockStmtList, quote do:
12151215
var
12161216
tmp = `objIdent`()
1217-
parser = JsonParser(lexer: newLexer(`str`))
1217+
parser = JsonParser(lexer: newJsonLexer(`str`))
12181218
parser.curr = parser.nextToken()
12191219
parser.next = parser.nextToken()
12201220
parser.parseJson(tmp)

src/openparser/yaml.nim

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type
4141
ytkComment
4242
ytkUnknown
4343

44-
Token* = ref object
44+
YamlToken* = ref object
4545
## Represents a lexical token produced by the YAML lexer
4646
kind*: YamlTokenKind
4747
value*: string
@@ -51,7 +51,7 @@ type
5151
wsno*: int
5252
indent*: int
5353

54-
Lexer* = object
54+
YamlLexer* = object
5555
## Performs lexical analysis on a YAML input string,
5656
## producing tokens for the parser
5757
input: string
@@ -61,21 +61,21 @@ type
6161
current: char
6262

6363
YamlParser* = object
64-
## Parses a sequence of tokens from the Lexer to build a YAMLObject
65-
lex: Lexer
66-
prev, curr, next: Token
64+
## Parses a sequence of tokens from the YamlLexer to build a YAMLObject
65+
lex: YamlLexer
66+
prev, curr, next: YamlToken
6767

6868
YAML* = string
6969
## A simple alias for YAML strings
7070

7171
OpenParserYamlError* = object of CatchableError
7272
## Exception type for errors encountered during YAML parsing or dumping
7373

74-
proc newLexer*(input: string): Lexer =
75-
## Create a new Lexer for the given input string
76-
Lexer(input: input, len: input.len, line: 1, col: 1)
74+
proc newYamlLexer*(input: string): YamlLexer =
75+
## Create a new YamlLexer for the given input string
76+
YamlLexer(input: input, len: input.len, line: 1, col: 1)
7777

78-
proc charAt(l: Lexer, idx: int): char {.inline.} =
78+
proc charAt(l: YamlLexer, idx: int): char {.inline.} =
7979
if idx < 0 or idx >= l.len: return '\0'
8080
else: return l.input[idx]
8181

@@ -87,7 +87,7 @@ const
8787
unexpectedChar = "Unexpected character `$1`"
8888

8989

90-
proc getContext(l: Lexer, posOverride: int = -1): string =
90+
proc getContext(l: YamlLexer, posOverride: int = -1): string =
9191
# Show the full current line and place caret at exact token position.
9292
let rawPos = if posOverride >= 0: posOverride else: l.pos
9393
let atPos = max(0, min(rawPos, l.len))
@@ -111,7 +111,7 @@ proc getContext(l: Lexer, posOverride: int = -1): string =
111111
let markerPos = max(0, min(snippet.len, atPos - lineStart))
112112
result = snippet & "\n" & " ".repeat(markerPos) & "^"
113113

114-
proc error(l: var Lexer, msg: string) =
114+
proc error(l: var YamlLexer, msg: string) =
115115
# Raise a lexer error
116116
let context = getContext(l)
117117
raise newException(OpenParserYamlError, ("\n" & context & "\n" & "Error ($1:$2) " % [$l.line, $l.col]) & msg)
@@ -133,7 +133,7 @@ proc error(p: var YamlParser, msg: string) =
133133
("\n" & context & "\n" & "Error ($1:$2) " % [$atLine, $atCol]) & msg
134134
)
135135

136-
proc advance(l: var Lexer) =
136+
proc advance(l: var YamlLexer) =
137137
if l.pos < l.len - 1:
138138
inc l.pos
139139
l.current = l.charAt(l.pos)
@@ -142,7 +142,7 @@ proc advance(l: var Lexer) =
142142
l.pos = l.len
143143
l.current = '\0'
144144

145-
proc lineIndentAt(l: Lexer, idx: int): int {.inline.} =
145+
proc lineIndentAt(l: YamlLexer, idx: int): int {.inline.} =
146146
## Indent of the logical line containing idx (spaces/tabs at line start).
147147
if idx < 0 or idx >= l.len: return 0
148148

@@ -162,7 +162,7 @@ proc lineIndentAt(l: Lexer, idx: int): int {.inline.} =
162162
else:
163163
break
164164

165-
proc skipWhitespace(l: var Lexer, wsBeforeToken: var int): int =
165+
proc skipWhitespace(l: var YamlLexer, wsBeforeToken: var int): int =
166166
# Skip whitespace/newlines
167167
wsBeforeToken = 0
168168
while true:
@@ -187,20 +187,20 @@ proc skipWhitespace(l: var Lexer, wsBeforeToken: var int): int =
187187
return 0
188188
result = lineIndentAt(l, l.pos)
189189

190-
proc readIdentifier(l: var Lexer): string =
190+
proc readIdentifier(l: var YamlLexer): string =
191191
# Read an unquoted identifier (e.g. for keys or unquoted values)
192192
while l.current in {'a'..'z', 'A'..'Z', '0'..'9', '_', '-'}:
193193
result.add(l.current)
194194
advance(l)
195195

196-
proc readComment(l: var Lexer): string =
196+
proc readComment(l: var YamlLexer): string =
197197
# Read from '#' to end of line (excluding newline)
198198
advance(l) # skip '#'
199199
while l.current notin {'\0', '\n', '\r'}:
200200
result.add(l.current)
201201
advance(l)
202202

203-
proc readString(l: var Lexer, quote: char): string =
203+
proc readString(l: var YamlLexer, quote: char): string =
204204
# read a quoted string, handling escape sequences for double quotes
205205
while true:
206206
if l.current == '\0':
@@ -222,7 +222,7 @@ proc readString(l: var Lexer, quote: char): string =
222222
result.add(l.current)
223223
advance(l)
224224

225-
proc readNumber(l: var Lexer, kind: var YamlTokenKind): string =
225+
proc readNumber(l: var YamlLexer, kind: var YamlTokenKind): string =
226226
result = ""
227227
kind = ytkInteger
228228

@@ -253,7 +253,7 @@ proc readNumber(l: var Lexer, kind: var YamlTokenKind): string =
253253
result.add(l.current)
254254
advance(l)
255255

256-
proc tokenText(t: Token): string =
256+
proc tokenText(t: YamlToken): string =
257257
case t.kind
258258
of ytkIdentifier, ytkString, ytkFloat, ytkInteger: t.value
259259
else: $t.kind
@@ -270,12 +270,12 @@ let tokens = {
270270
'>': ytkGT,
271271
}.toTable
272272

273-
proc nextToken*(p: var YamlParser): Token =
273+
proc nextToken*(p: var YamlParser): YamlToken =
274274
## Lexical analysis to produce the next token from the input
275275
var wsBefore = 0
276276
let lineIndent = skipWhitespace(p.lex, wsBefore)
277277

278-
result = Token()
278+
result = YamlToken()
279279
result.line = p.lex.line
280280
result.col = p.lex.col
281281
result.pos = p.lex.pos
@@ -352,7 +352,7 @@ proc advance(p: var YamlParser) {.inline.} =
352352
p.curr = p.next
353353
p.next = p.nextToken()
354354

355-
proc getScalarValue(t: Token): YamlNode =
355+
proc getScalarValue(t: YamlToken): YamlNode =
356356
# Convert a scalar token to a YamlNode based on its kind
357357
case t.kind
358358
of ytkString:
@@ -609,7 +609,7 @@ proc `$`*(yamlObject: YAMLObject): string =
609609
toJson(yamlObject)
610610

611611
proc parseYAML*(input: YAML): YAMLObject =
612-
var p = YamlParser(lex: Lexer(input: input, len: input.len, line: 1, col: 1))
612+
var p = YamlParser(lex: YamlLexer(input: input, len: input.len, line: 1, col: 1))
613613
p.lex.current = p.lex.charAt(0)
614614
p.curr = p.nextToken()
615615
p.next = p.nextToken()
@@ -696,7 +696,7 @@ macro parseYamlMacro(x: typed, str: typed): untyped =
696696
add blockStmtList, quote do:
697697
var
698698
tmp = `objIdent`()
699-
parser = YamlParser(lex: newLexer(`str`))
699+
parser = YamlParser(lex: newYamlLexer(`str`))
700700
parser.curr = parser.nextToken()
701701
parser.next = parser.nextToken()
702702
parser.parseYAML(tmp)

0 commit comments

Comments
 (0)