classSymbol
final class Symbol
Public API: explicitly declared with
@visibility public.A grammar symbol named where it is written.
Lemon tells terminals from nonterminals by the first letter of the name: an upper-case letter starts a terminal, a lower-case letter a nonterminal.
$file = (new \LemonParser\Parser())->parse("expr ::= expr PLUS expr.\n");
$rule = $file->rules()[0];
[$rule->lhs->isTerminal(), $rule->items[1]->symbols[0]->isTerminal()] // => [false, true]Properties§
public string $namepublic Location $locationMethods§
public function __construct(public string $name, public Location $location)Parameters
$name | string | The name as written |
$location | Location | Where it is written |
public function isTerminal(): boolReports whether the name starts with an upper-case letter, which makes it a terminal.
Returns
bool True for a terminalTest cases 1
Calls 1
- function-call
ctype_upperline 39
public function isNonterminal(): boolReports whether the name starts with a lower-case letter, which makes it a nonterminal.
Returns
bool True for a nonterminalTest cases 1
Calls 1
- function-call
ctype_lowerline 49
Test cases 43§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 2
Other tests reaching this symbol 41
TreeDumper::namescallsDestructorTest::testLocationcallsFallbackTest::testFallbackcallsFallbackTest::testTokenscallsPrecedenceDeclarationTest::testLocationcallsTokenClassTest::testLocationcallsTokenDeclarationTest::testLocationcallsTypeDeclarationTest::testLocationcallsWildcardTest::testLocationcallsGrammarFileTest::testDeclarationscallsGrammarFileTest::testRulescallsRhsItemTest::testIsMultiTerminalcallsRhsItemTest::testLocationcallsRuleTest::testSymbolscallsRuleTest::testWithCodecallsRuleTest::testWithNeverReducecallsRuleTest::testWithPrecedencecallsLemonGrammarCompilerTestcallsLemonGrammarReaderTest::testNamescallsParserTestcallsDeclarationPrinterTest::testListcallsDeclarationPrinterTest::testPrintcallsPrinterTest::testPrintcallsRulePrinterTest::testItemcallsRulePrinterTest::testPrintcallsDeclarationReaderTestcallsGrammarReaderTest::testCodecallsGrammarReaderTest::testCodeRejectsASecondBlockcallsGrammarReaderTest::testPrecedencecallsGrammarReaderTest::testPrecedenceRejectsAMissingClosercallsGrammarReaderTest::testPrecedenceRejectsASecondMarkcallsRuleReaderTest::testAliascallsRuleReaderTest::testAliasRejectsABadNamecallsRuleReaderTest::testAliasRejectsAMissingClosercallsRuleReaderTest::testCompoundcallsRuleReaderTest::testCompoundRejectsANonterminalcallsRuleReaderTest::testReadcallsSymbolListReaderTest::testClassTokenscallsSymbolListReaderTest::testFallbackscallsSymbolListReaderTest::testRankedcallsSymbolListReaderTest::testTokenscalls
Relations§
Instantiated in 12
- new LemonParser\Syntax\DeclarationReader::readDestructor() packages/lemon-parser/src/Syntax/DeclarationReader.php:124
- new LemonParser\Syntax\DeclarationReader::readType() packages/lemon-parser/src/Syntax/DeclarationReader.php:147
- new LemonParser\Syntax\DeclarationReader::readTokenClass() packages/lemon-parser/src/Syntax/DeclarationReader.php:172
- new LemonParser\Syntax\GrammarReader::precedence() packages/lemon-parser/src/Syntax/GrammarReader.php:130
- new LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:44
- new LemonParser\Syntax\RuleReader::read() packages/lemon-parser/src/Syntax/RuleReader.php:57
- new LemonParser\Syntax\RuleReader::compound() packages/lemon-parser/src/Syntax/RuleReader.php:111
- new LemonParser\Syntax\SymbolListReader::ranked() packages/lemon-parser/src/Syntax/SymbolListReader.php:37
- new LemonParser\Syntax\SymbolListReader::fallbacks() packages/lemon-parser/src/Syntax/SymbolListReader.php:65
- new LemonParser\Syntax\SymbolListReader::tokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:90
- new LemonParser\Syntax\SymbolListReader::wildcard() packages/lemon-parser/src/Syntax/SymbolListReader.php:114
- new LemonParser\Syntax\SymbolListReader::classTokens() packages/lemon-parser/src/Syntax/SymbolListReader.php:139
Type declarations 12
- type LemonParser\Ast\Declaration\Destructor packages/lemon-parser/src/Ast/Declaration/Destructor.php:29
- type LemonParser\Ast\Declaration\Fallback packages/lemon-parser/src/Ast/Declaration/Fallback.php:39
- type LemonParser\Ast\Declaration\TokenClass packages/lemon-parser/src/Ast/Declaration/TokenClass.php:28
- type LemonParser\Ast\Declaration\TypeDeclaration packages/lemon-parser/src/Ast/Declaration/TypeDeclaration.php:29
- type LemonParser\Ast\Declaration\Wildcard packages/lemon-parser/src/Ast/Declaration/Wildcard.php:26
- type LemonParser\Ast\Rule packages/lemon-parser/src/Ast/Rule.php:33
- type LemonParser\Ast\Rule packages/lemon-parser/src/Ast/Rule.php:36
- type LemonParser\Ast\Rule packages/lemon-parser/src/Ast/Rule.php:50
- type LemonParser\Printer\DeclarationPrinter::print() packages/lemon-parser/src/Printer/DeclarationPrinter.php:46
- type LemonParser\Printer\RulePrinter::item() packages/lemon-parser/src/Printer/RulePrinter.php:54
- type LemonParser\Syntax\SymbolListReader packages/lemon-parser/src/Syntax/SymbolListReader.php:106
- type SqlParser\Compiler\LemonGrammarReader::names() packages/sql-parser/src/Compiler/LemonGrammarReader.php:156