classSymbolRegistry
final class SymbolRegistry
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
Remembers what Lemon's symbol table would know while the file is read.
Lemon rejects a second precedence, type, fallback or wildcard for a symbol and a token class named after a symbol already seen; this keeps enough to raise the same errors in the same places.
Methods§
public function see(string $name): voidRecords a symbol as Lemon's Symbol_new does.
Parameters
$name | string | The symbol |
Test cases 2
Called from 13
- method-call LemonParser\Syntax\DeclarationReader::readDestructor() packages/lemon-parser/src/Syntax/DeclarationReader.php:121
- method-call LemonParser\Syntax\DeclarationReader::readTokenClass() packages/lemon-parser/src/Syntax/DeclarationReader.php:170
- method-call LemonParser\Syntax\GrammarReader::precedence() packages/lemon-parser/src/Syntax/GrammarReader.php:124
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:34
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:43
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:46
- method-call LemonParser\Syntax\SymbolListReader::fallbacks() packages/lemon-parser/src/Syntax/SymbolListReader.php:61
- method-call LemonParser\Syntax\SymbolListReader::tokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:89
- method-call LemonParser\Syntax\SymbolListReader::classTokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:138
- method-call LemonParser\Syntax\SymbolRegistry::rank() packages/lemon-parser/src/Syntax/SymbolRegistry.php:75
- method-call LemonParser\Syntax\SymbolRegistry::type() packages/lemon-parser/src/Syntax/SymbolRegistry.php:95
- method-call LemonParser\Syntax\SymbolRegistry::fallBack() packages/lemon-parser/src/Syntax/SymbolRegistry.php:109
- method-call LemonParser\Syntax\SymbolRegistry::wildcard() packages/lemon-parser/src/Syntax/SymbolRegistry.php:126
public function isKnown(string $name): boolReports whether a symbol was seen, as Lemon's Symbol_find does.
Parameters
$name | string | The symbol |
Returns
bool True when seen beforeTest cases 13
DeclarationReaderTest::testReadDestructorcallsDeclarationReaderTest::testReadTokenClasscallsGrammarReaderTest::testPrecedencecallsRuleReaderTest::testReadcallsSymbolListReaderTest::testClassTokenscallsSymbolListReaderTest::testFallbackscallsSymbolListReaderTest::testRankedcallsSymbolListReaderTest::testTokenscallsSymbolRegistryTest::testFallBackcallsSymbolRegistryTest::testIsKnowncallsSymbolRegistryTest::testSeecallsSymbolRegistryTest::testTypecallsSymbolRegistryTest::testWildcardcalls
public function rank(string $name, Location $location): voidRecords a precedence for a terminal.
Parameters
$name | string | The terminal |
$location | Location | Where it is written |
Throws
SyntaxException When the terminal already has oneTest cases 2
Called from 1
Calls 2
- method-call SymbolRegistry::see() line 75
- new SyntaxException line 77
public function type(string $name, Location $location): voidRecords a type for a symbol.
Parameters
$name | string | The symbol |
$location | Location | Where it is written |
Throws
SyntaxException When the symbol already has oneTest cases 1
Called from 1
Calls 2
- new SyntaxException line 93
- method-call SymbolRegistry::see() line 95
public function fallBack(string $name, Location $location): voidRecords that a token falls back to another.
Parameters
$name | string | The token |
$location | Location | Where it is written |
Throws
SyntaxException When the token already falls backTest cases 1
Called from 1
Calls 2
- method-call SymbolRegistry::see() line 109
- new SyntaxException line 111
public function wildcard(string $name, Location $location): voidRecords the wildcard token.
Parameters
$name | string | The token |
$location | Location | Where it is written |
Throws
SyntaxException When a wildcard was already namedTest cases 1
Called from 1
Calls 2
- method-call SymbolRegistry::see() line 126
- new SyntaxException line 128
Private surface 5§
Implementation details, listed for orientation only.
private array<string, true> $seen = []private array<string, true> $ranked = []private array<string, true> $typed = []private array<string, true> $fallen = []private ?string $wildcard = nullTest cases 43§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 6
Other tests reaching this symbol 37
LemonGrammarCompilerTestcallsLemonGrammarReaderTestcallsParserTestcallsDeclarationReaderTest::testReadcallsDeclarationReaderTest::testReadDestructorcallsDeclarationReaderTest::testReadDestructorRejectsAMissingSymbolcallsDeclarationReaderTest::testReadRejectsAKeywordThatIsNotAWordcallsDeclarationReaderTest::testReadRejectsAnUnknownKeywordcallsDeclarationReaderTest::testReadTokenClasscallsDeclarationReaderTest::testReadTokenClassRejectsAKnownNamecallsDeclarationReaderTest::testReadTokenClassRejectsATerminalNamecallsDeclarationReaderTest::testReadTypecallsDeclarationReaderTest::testReadTypeRejectsAMissingSymbolcallsDeclarationReaderTest::testReadTypeRejectsASecondTypecallsGrammarReaderTest::testPrecedencecallsGrammarReaderTest::testPrecedenceRejectsAMissingClosercallsGrammarReaderTest::testPrecedenceRejectsAMissingRulecallsGrammarReaderTest::testPrecedenceRejectsANonterminalcallsGrammarReaderTest::testPrecedenceRejectsASecondMarkcallsRuleReaderTest::testReadcallsRuleReaderTest::testReadAcceptsAnEmptyRightHandSidecallsRuleReaderTest::testReadRejectsACompoundAtTheStartcallsRuleReaderTest::testReadRejectsALowerCaseCompoundcallsRuleReaderTest::testReadRejectsAnIllegalCharactercallsRuleReaderTest::testReadRejectsTheEndOfTheFilecallsSymbolListReaderTest::testClassTokenscallsSymbolListReaderTest::testClassTokensRejectsANonterminalcallsSymbolListReaderTest::testFallbackscallsSymbolListReaderTest::testFallbacksRejectsANonterminalcallsSymbolListReaderTest::testFallbacksRejectsASecondFallbackForATokencallsSymbolListReaderTest::testRankedcallsSymbolListReaderTest::testRankedRejectsANonterminalcallsSymbolListReaderTest::testTokenscallsSymbolListReaderTest::testTokensRejectsANonterminalcallsSymbolListReaderTest::testWildcardcallsSymbolListReaderTest::testWildcardRejectsANonterminalcallsSymbolListReaderTest::testWildcardRejectsASecondTokencalls
Relations§
Instantiated in 1
Method calls 14
- method-call LemonParser\Syntax\DeclarationReader::readDestructor() packages/lemon-parser/src/Syntax/DeclarationReader.php:121
- method-call LemonParser\Syntax\DeclarationReader::readType() packages/lemon-parser/src/Syntax/DeclarationReader.php:144
- method-call LemonParser\Syntax\DeclarationReader::readTokenClass() packages/lemon-parser/src/Syntax/DeclarationReader.php:167
- method-call LemonParser\Syntax\DeclarationReader::readTokenClass() packages/lemon-parser/src/Syntax/DeclarationReader.php:170
- method-call LemonParser\Syntax\GrammarReader::precedence() packages/lemon-parser/src/Syntax/GrammarReader.php:124
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:34
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:43
- method-call LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:46
- method-call LemonParser\Syntax\SymbolListReader::ranked() packages/lemon-parser/src/Syntax/SymbolListReader.php:36
- method-call LemonParser\Syntax\SymbolListReader::fallbacks() packages/lemon-parser/src/Syntax/SymbolListReader.php:61
- method-call LemonParser\Syntax\SymbolListReader::fallbacks() packages/lemon-parser/src/Syntax/SymbolListReader.php:63
- method-call LemonParser\Syntax\SymbolListReader::tokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:89
- method-call LemonParser\Syntax\SymbolListReader::wildcard() packages/lemon-parser/src/Syntax/SymbolListReader.php:113
- method-call LemonParser\Syntax\SymbolListReader::classTokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:138
Type declarations 11
- type LemonParser\Syntax\DeclarationReader packages/lemon-parser/src/Syntax/DeclarationReader.php:50
- type LemonParser\Syntax\DeclarationReader packages/lemon-parser/src/Syntax/DeclarationReader.php:115
- type LemonParser\Syntax\DeclarationReader packages/lemon-parser/src/Syntax/DeclarationReader.php:138
- type LemonParser\Syntax\DeclarationReader packages/lemon-parser/src/Syntax/DeclarationReader.php:161
- type LemonParser\Syntax\GrammarReader packages/lemon-parser/src/Syntax/GrammarReader.php:112
- type LemonParser\Syntax\RuleReader packages/lemon-parser/src/Syntax/RuleReader.php:32
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:29
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:53
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:82
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:106
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:130