MCPcopy Index your code
hub / github.com/python/cpython / PLexer

Class PLexer

Tools/cases_generator/plexer.py:6–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4
5
6class PLexer:
7 def __init__(self, src: str, filename: str):
8 self.src = src
9 self.filename = filename
10 self.tokens = list(lx.tokenize(self.src, filename=filename))
11 self.pos = 0
12
13 def getpos(self) -> int:
14 # Current position
15 return self.pos
16
17 def eof(self) -> bool:
18 # Are we at EOF?
19 return self.pos >= len(self.tokens)
20
21 def setpos(self, pos: int) -> None:
22 # Reset position
23 assert 0 <= pos <= len(self.tokens), (pos, len(self.tokens))
24 self.pos = pos
25
26 def backup(self) -> None:
27 # Back up position by 1
28 assert self.pos > 0
29 self.pos -= 1
30
31 def next(self, raw: bool = False) -> Token | None:
32 # Return next token and advance position; None if at EOF
33 # TODO: Return synthetic EOF token instead of None?
34 while self.pos < len(self.tokens):
35 tok = self.tokens[self.pos]
36 self.pos += 1
37 if raw or tok.kind != "COMMENT":
38 return tok
39 return None
40
41 def peek(self, raw: bool = False) -> Token | None:
42 # Return next token without advancing position
43 tok = self.next(raw=raw)
44 self.backup()
45 return tok
46
47 def maybe(self, kind: str, raw: bool = False) -> Token | None:
48 # Return next token without advancing position if kind matches
49 tok = self.peek(raw=raw)
50 if tok and tok.kind == kind:
51 return tok
52 return None
53
54 def expect(self, kind: str) -> Token | None:
55 # Return next token and advance position if kind matches
56 tkn = self.next()
57 if tkn is not None:
58 if tkn.kind == kind:
59 return tkn
60 self.backup()
61 return None
62
63 def require(self, kind: str) -> Token:

Callers 1

plexer.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…