classCursor
final class Cursor
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
Reads a grammar file byte by byte, keeping the line and column.
Properties§
public string $sourceMethods§
public function __construct(public string $source)Parameters
$source | string | The whole file |
public function eof(): boolReports whether everything has been read.
Returns
bool True at the end of the fileTest cases 2
CursorTest::testEofcallsScannerTest::testSkipTriviacalls
Called from 6
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:42
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:71
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:53
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:81
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:322
Calls 1
- function-call
strlenline 36
public function peek(int $ahead = 0): stringAnswers the byte at a distance ahead without consuming it.
Parameters
$ahead | int | Distance from the current position |
Returns
string The byte, or an empty string past the endTest cases 1
CursorTest::testPeekcalls
Called from 8
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:107
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:109
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:186
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:190
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:218
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:264
- method-call BisonParser\Scanner\Scanner::punctuation() packages/bison-parser/src/Scanner/Scanner.php:350
public function offset(): intAnswers the current byte offset.
Returns
int Offset from the start of the fileTest cases 4
CursorTest::testLookingAtcallsCursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testTakecalls
public function location(): LocationAnswers the current position as a line and column.
Returns
Location The positionTest cases 2
Called from 11
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:38
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:68
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:93
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:54
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:63
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:65
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:86
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:108
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:210
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:215
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
public function startsWith(string $prefix): boolReports whether the unread text starts with a string.
Parameters
$prefix | string | Text to look for |
Returns
bool True when the next bytes spell the prefixTest cases 1
Called from 8
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:72
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:85
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:122
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:148
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:151
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:280
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:309
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:314
public function take(int $length): stringConsumes a number of bytes and answers them, counting the lines they hold.
Parameters
$length | int | How many bytes to consume |
Returns
string The consumed bytesTest cases 14
CodeReaderTest::testBracedcallsCodeReaderTest::testBracedClosesOnTheBraceThatBalancesADigraphcallsCodeReaderTest::testBracedSplicesBackslashNewlinescallsCodeReaderTest::testProloguecallsCursorTest::testEofcallsCursorTest::testLocationcallsCursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testStartsWithcallsCursorTest::testTakecallsCursorTest::testTakeUntilcallsScannerTest::testBracketedcallsScannerTest::testPercentcallsScannerTest::testSkipTriviacalls
Called from 16
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:39
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:69
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:73
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:118
- method-call BisonParser\Scanner\Cursor::match() packages/bison-parser/src/Scanner/Cursor.php:118
- method-call BisonParser\Scanner\Cursor::takeUntil() packages/bison-parser/src/Scanner/Cursor.php:146
- method-call BisonParser\Scanner\Cursor::takeUntil() packages/bison-parser/src/Scanner/Cursor.php:147
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:64
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:152
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:211
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:221
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:310
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:315
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:319
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:323
- method-call BisonParser\Scanner\Scanner::punctuation() packages/bison-parser/src/Scanner/Scanner.php:364
public function match(string $pattern): string|nullConsumes what a pattern matches at the current position.
Parameters
$pattern | string | Regular expression without anchors or delimiters |
Returns
string|null The matched text, or null when nothing matches hereTest cases 1
CursorTest::testMatchcalls
Called from 17
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:94
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:96
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:103
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:110
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:118
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:82
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:111
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:156
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:159
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:165
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:183
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:213
- method-call BisonParser\Scanner\Scanner::integer() packages/bison-parser/src/Scanner/Scanner.php:238
- method-call BisonParser\Scanner\Scanner::integer() packages/bison-parser/src/Scanner/Scanner.php:240
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:266
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:282
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:323
Calls 4
- function-call
preg_matchline 114 - function-call
str_replaceline 114 - method-call Cursor::take() line 118
- function-call
strlenline 118
public function lookingAt(string $pattern): boolReports whether a pattern matches at the current position, without consuming it.
Parameters
$pattern | string | Regular expression without anchors or delimiters |
Returns
bool True when it matches hereTest cases 1
Called from 1
public function takeUntil(string $needle): string|nullConsumes everything up to and including a delimiter.
Parameters
$needle | string | Text that ends the run |
Returns
string|null The consumed text without the delimiter, or null when the file ends firstTest cases 1
Called from 1
Calls 3
- function-call
strposline 142 - method-call Cursor::take() line 146
- function-call
strlenline 147
Private surface 3§
Implementation details, listed for orientation only.
private int $offset = 0private int $line = 1private int $column = 1Test cases 53§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 9
CursorTest::testEofcallsCursorTest::testLocationcallsCursorTest::testLookingAtcallsCursorTest::testMatchcallsCursorTest::testOffsetcallsCursorTest::testPeekcallsCursorTest::testStartsWithcallsCursorTest::testTakecallsCursorTest::testTakeUntilcalls
Other tests reaching this symbol 44
BisonGrammarCompilerTestcallsBisonGrammarReaderTestcallsParserTestcallsCodeReaderTest::testBracedcallsCodeReaderTest::testBracedClosesOnTheBraceThatBalancesADigraphcallsCodeReaderTest::testBracedNeverClosesOnADigraphcallsCodeReaderTest::testBracedRejectsAnUnterminatedBlockcallsCodeReaderTest::testBracedSplicesBackslashNewlinescallsCodeReaderTest::testProloguecallsCodeReaderTest::testPrologueRejectsAnUnterminatedBlockcallsCodeReaderTest::testUnitcallsCodeReaderTest::testUnitRejectsAnUnterminatedCharacterLiteralcallsCodeReaderTest::testUnitRejectsAnUnterminatedCommentcallsCodeReaderTest::testUnitRejectsAnUnterminatedStringcallsScannerTest::testBracketedcallsScannerTest::testBracketedRejectsAMissingClosercallsScannerTest::testBracketedRejectsAMissingNamecallsScannerTest::testBracketedRejectsTheEndOfTheFilecallsScannerTest::testIdentifiercallsScannerTest::testIntegercallsScannerTest::testIntegerRejectsADecimalOutOfRangecallsScannerTest::testIntegerRejectsADecimalTooLongToReadcallsScannerTest::testIntegerRejectsAHexadecimalOutOfRangecallsScannerTest::testIntegerRejectsAHexadecimalTooLongToReadcallsScannerTest::testIntegerRejectsAnIdentifierStartingWithADigitcallsScannerTest::testLiteralcallsScannerTest::testLiteralRejectsAnEmptyCharactercallsScannerTest::testLiteralRejectsAnUnterminatedCharactercallsScannerTest::testLiteralRejectsAnUnterminatedStringcallsScannerTest::testLiteralRejectsAWideCharactercallsScannerTest::testNextcallsScannerTest::testNextRejectsAnInvalidCharactercallsScannerTest::testPercentcallsScannerTest::testPercentRejectsABarePercentSigncallsScannerTest::testPercentRejectsAnUnknownDirectivecallsScannerTest::testPunctuationcallsScannerTest::testSkipTriviacallsScannerTest::testSkipTriviaRejectsAnUnterminatedCommentcallsScannerTest::testTagcallsScannerTest::testTagRejectsAnUnterminatedTagcallsDeclarationParserTestcallsGrammarParserTestcallsRuleParserTestcallsSymbolListParserTestcalls
Relations§
Instantiated in 1
Method calls 65
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:38
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:39
- method-call BisonParser\Scanner\CodeReader::braced() packages/bison-parser/src/Scanner/CodeReader.php:42
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:68
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:69
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:71
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:72
- method-call BisonParser\Scanner\CodeReader::prologue() packages/bison-parser/src/Scanner/CodeReader.php:73
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:93
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:94
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:96
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:103
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:107
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:110
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:118
- method-call BisonParser\Scanner\CodeReader::unit() packages/bison-parser/src/Scanner/CodeReader.php:118
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:53
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:54
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:63
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:64
- method-call BisonParser\Scanner\Scanner::scan() packages/bison-parser/src/Scanner/Scanner.php:65
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:81
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:82
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:85
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:86
- method-call BisonParser\Scanner\Scanner::skipTrivia() packages/bison-parser/src/Scanner/Scanner.php:87
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:108
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:109
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:111
- method-call BisonParser\Scanner\Scanner::next() packages/bison-parser/src/Scanner/Scanner.php:122
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:148
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:151
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:152
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:156
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:159
- method-call BisonParser\Scanner\Scanner::percent() packages/bison-parser/src/Scanner/Scanner.php:165
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:183
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:186
- method-call BisonParser\Scanner\Scanner::identifier() packages/bison-parser/src/Scanner/Scanner.php:190
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:210
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:211
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:213
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:215
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:218
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:219
- method-call BisonParser\Scanner\Scanner::bracketed() packages/bison-parser/src/Scanner/Scanner.php:221
- method-call BisonParser\Scanner\Scanner::integer() packages/bison-parser/src/Scanner/Scanner.php:238
- method-call BisonParser\Scanner\Scanner::integer() packages/bison-parser/src/Scanner/Scanner.php:239
- method-call BisonParser\Scanner\Scanner::integer() packages/bison-parser/src/Scanner/Scanner.php:240
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:264
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:266
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:280
- method-call BisonParser\Scanner\Scanner::literal() packages/bison-parser/src/Scanner/Scanner.php:282
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:309
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:310
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:314
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:315
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:319
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:322
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:323
- method-call BisonParser\Scanner\Scanner::tag() packages/bison-parser/src/Scanner/Scanner.php:323
- method-call BisonParser\Scanner\Scanner::punctuation() packages/bison-parser/src/Scanner/Scanner.php:350
- method-call BisonParser\Scanner\Scanner::punctuation() packages/bison-parser/src/Scanner/Scanner.php:364
Type declarations 12
- type BisonParser\Scanner\CodeReader packages/bison-parser/src/Scanner/CodeReader.php:36
- type BisonParser\Scanner\CodeReader packages/bison-parser/src/Scanner/CodeReader.php:66
- type BisonParser\Scanner\CodeReader packages/bison-parser/src/Scanner/CodeReader.php:91
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:79
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:106
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:146
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:181
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:208
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:236
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:262
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:307
- type BisonParser\Scanner\Scanner packages/bison-parser/src/Scanner/Scanner.php:348