Lines Matching refs:Symbol
21 class Symbol;
191 std::vector<Symbol*> token_symbols;
217 explicit Rule(std::vector<Symbol*> right_hand_side,
221 Symbol* left() const {
225 const std::vector<Symbol*>& right() const { return right_hand_side_; }
227 void SetLeftHandSide(Symbol* left_hand_side) {
236 Symbol* left_hand_side_ = nullptr;
237 std::vector<Symbol*> right_hand_side_;
241 // A Symbol represents a terminal or a non-terminal of the grammar.
248 class Symbol {
250 Symbol() = default;
251 Symbol(std::initializer_list<Rule> rules) { *this = rules; }
253 // Disallow copying and moving to ensure Symbol has a stable address.
254 Symbol(const Symbol&) = delete;
255 Symbol& operator=(const Symbol&) = delete;
257 V8_EXPORT_PRIVATE Symbol& operator=(std::initializer_list<Rule> rules);
297 Symbol* NextSymbol() const {
349 Symbol* left() const { return rule_->left(); }
350 const std::vector<Symbol*>& right() const { return rule_->right(); }
364 inline base::Optional<ParseResult> Symbol::RunAction(
372 Symbol* start, const LexerResult& tokens,
375 inline base::Optional<ParseResult> ParseTokens(Symbol* start,
404 Symbol* Pattern(PatternFunction pattern) { return &patterns_[pattern]; }
405 Symbol* Token(const std::string& keyword) { return &keywords_[keyword]; }
410 std::map<PatternFunction, Symbol> patterns_;
411 std::map<std::string, Symbol> keywords_;
412 Symbol* MatchToken(InputPosition* pos, InputPosition end);
416 // Grammar is intended to be subclassed, with Symbol members forming the
422 explicit Grammar(Symbol* start) : start_(start) {}
430 Symbol* Token(const std::string& s) { return lexer_.Token(s); }
431 Symbol* Pattern(PatternFunction pattern) { return lexer_.Pattern(pattern); }
436 Symbol* NewSymbol(std::initializer_list<Rule> rules = {}) {
437 auto symbol = std::make_unique<Symbol>(rules);
438 Symbol* result = symbol.get();
461 Symbol* Sequence(std::vector<Symbol*> symbols) {
487 Symbol* TryOrDefault(Symbol* s) {
513 Symbol* NonemptyList(Symbol* element,
514 base::Optional<Symbol*> separator = {}) {
515 Symbol* list = NewSymbol();
524 Symbol* List(Symbol* element, base::Optional<Symbol*> separator = {}) {
529 Symbol* Optional(Symbol* x) {
533 Symbol* CheckIf(Symbol* x) {
542 std::vector<std::unique_ptr<Symbol>> generated_symbols_;
543 Symbol* start_;