| Index: petitparser/lib/src/core/composite.dart
|
| diff --git a/petitparser/lib/src/core/composite.dart b/petitparser/lib/src/core/composite.dart
|
| deleted file mode 100644
|
| index ed2a63b8b322cdb533cdde9721bbb9b7cba099c7..0000000000000000000000000000000000000000
|
| --- a/petitparser/lib/src/core/composite.dart
|
| +++ /dev/null
|
| @@ -1,189 +0,0 @@
|
| -part of petitparser;
|
| -
|
| -/**
|
| - * Helper to compose complex grammars from various primitive parsers.
|
| - *
|
| - * Note, this class is deprecated in favor of [GrammarDefinition] that provides
|
| - * a more flexible way to define composite parsers.
|
| - *
|
| - * To create a new composite grammar subclass [CompositeParser]. Override
|
| - * the method [initialize] and for every production call [def] giving the
|
| - * production a name. The start production must be named 'start'. To refer
|
| - * to other productions (forward and backward) use [ref].
|
| - *
|
| - * Consider the following example to parse a list of numbers:
|
| - *
|
| - * class NumberListGrammar extends CompositeParser {
|
| - * void initialize() {
|
| - * def('start', ref('list').end());
|
| - * def('list', ref('element').separatedBy(char(','),
|
| - * includeSeparators: false));
|
| - * def('element', digit().plus().flatten());
|
| - * }
|
| - * }
|
| - *
|
| - * You might want to create future subclasses of your composite grammar
|
| - * to redefine the grammar or attach custom actions. In such a subclass
|
| - * override the method [initialize] again and call super. Then use
|
| - * [redef] to redefine an existing production, and [action] to attach an
|
| - * action to an existing production.
|
| - *
|
| - * Consider the following example that attaches a production action and
|
| - * converts the digits to actual numbers:
|
| - *
|
| - * class NumberListParser extends NumberListGrammar {
|
| - * void initialize() {
|
| - * action('element', (value) => int.parse(value));
|
| - * }
|
| - * }
|
| - */
|
| -@deprecated
|
| -abstract class CompositeParser extends DelegateParser {
|
| - bool _completed = false;
|
| - final Map<String, Parser> _defined = new Map();
|
| - final Map<String, SettableParser> _undefined = new Map();
|
| -
|
| - CompositeParser() : super(failure('Not initalized production: start')) {
|
| - initialize();
|
| - _complete();
|
| - }
|
| -
|
| - /**
|
| - * Initializes the composite grammar.
|
| - */
|
| - void initialize();
|
| -
|
| - /**
|
| - * Internal method to complete the grammar.
|
| - */
|
| - void _complete() {
|
| - _delegate = ref('start');
|
| - _undefined.forEach((name, parser) {
|
| - if (!_defined.containsKey(name)) {
|
| - throw new UndefinedProductionError(name);
|
| - }
|
| - parser.set(_defined[name]);
|
| - });
|
| - _undefined.clear();
|
| - _completed = true;
|
| - _delegate = ref('start');
|
| - }
|
| -
|
| - /**
|
| - * Returns a reference to a production with a [name].
|
| - *
|
| - * This method works during initialization and after completion of the
|
| - * initialization. During the initialization it returns delegate parsers
|
| - * that are eventually replaced by the real parsers. Afterwards it
|
| - * returns the defined parser (mostly useful for testing).
|
| - */
|
| - Parser ref(String name) {
|
| - if (_completed) {
|
| - if (_defined.containsKey(name)) {
|
| - return _defined[name];
|
| - } else {
|
| - throw new UndefinedProductionError(name);
|
| - }
|
| - } else {
|
| - return _undefined.putIfAbsent(name, () {
|
| - return failure('Not initalized production: $name').settable();
|
| - });
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Convenience operator returning a reference to a production with
|
| - * a [name]. See [CompositeParser.ref] for details.
|
| - */
|
| - Parser operator [](String name) => ref(name);
|
| -
|
| - /**
|
| - * Defines a production with a [name] and a [parser]. Only call this method
|
| - * from [initialize].
|
| - *
|
| - * The following example defines a list production that consumes
|
| - * several elements separated by a comma.
|
| - *
|
| - * def('list', ref('element').separatedBy(char(',')));
|
| - */
|
| - void def(String name, Parser parser) {
|
| - if (_completed) {
|
| - throw new CompletedParserError();
|
| - } else if (_defined.containsKey(name)) {
|
| - throw new RedefinedProductionError(name);
|
| - } else {
|
| - _defined[name] = parser;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Redefines an existing production with a [name] and a [replacement]
|
| - * parser or function producing a new parser. The code raises an
|
| - * [UndefinedProductionError] if [name] is an undefined production. Only call
|
| - * this method from [initialize].
|
| - *
|
| - * The following example redefines the previously defined list production
|
| - * by making it optional:
|
| - *
|
| - * redef('list', (parser) => parser.optional());
|
| - */
|
| - void redef(String name, replacement) {
|
| - if (_completed) {
|
| - throw new CompletedParserError();
|
| - } else if (!_defined.containsKey(name)) {
|
| - throw new UndefinedProductionError(name);
|
| - } else {
|
| - _defined[name] =
|
| - replacement is Parser ? replacement : replacement(_defined[name]);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Attaches an action [function] to an existing production [name]. The code
|
| - * raises an [UndefinedProductionError] if [name] is an undefined production.
|
| - * Only call this method from [initialize].
|
| - *
|
| - * The following example attaches an action returning the size of list of
|
| - * the previously defined list production:
|
| - *
|
| - * action('list', (list) => list.length);
|
| - */
|
| - void action(String name, Function function) {
|
| - redef(name, (parser) => parser.map(function));
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Error raised when somebody tries to modify a [CompositeParser] outside
|
| - * the [CompositeParser.initialize] method.
|
| - */
|
| -class CompletedParserError extends Error {
|
| - CompletedParserError();
|
| -
|
| - @override
|
| - String toString() => 'Completed parser';
|
| -}
|
| -
|
| -/**
|
| - * Error raised when an undefined production is accessed.
|
| - */
|
| -class UndefinedProductionError extends Error {
|
| - final String name;
|
| -
|
| - UndefinedProductionError(this.name);
|
| -
|
| - @override
|
| - String toString() => 'Undefined production: $name';
|
| -}
|
| -
|
| -/**
|
| - * Error raised when a production is accidentally redefined.
|
| - */
|
| -class RedefinedProductionError extends Error {
|
| - final String name;
|
| -
|
| - RedefinedProductionError(this.name);
|
| -
|
| - @override
|
| - String toString() => 'Redefined production: $name';
|
| -}
|
|
|