| Index: packages/petitparser/lib/src/petitparser/definition.dart
|
| diff --git a/petitparser/lib/src/core/definition.dart b/packages/petitparser/lib/src/petitparser/definition.dart
|
| similarity index 53%
|
| rename from petitparser/lib/src/core/definition.dart
|
| rename to packages/petitparser/lib/src/petitparser/definition.dart
|
| index bd94d69f033ab67e331ca2b3af45579033742553..44b7d72fe0c7a55c2b598a23ff952f1090554517 100644
|
| --- a/petitparser/lib/src/core/definition.dart
|
| +++ b/packages/petitparser/lib/src/petitparser/definition.dart
|
| @@ -1,62 +1,56 @@
|
| part of petitparser;
|
|
|
| -/**
|
| - * Helper to conveniently define and build complex, recursive grammars using
|
| - * plain Dart code.
|
| - *
|
| - * To create a new grammar definition subclass [GrammarDefinition]. For every
|
| - * production create a new method returning the primitive parser defining it.
|
| - * The method called [start] is supposed to return the start production of the
|
| - * grammar. To refer to a production defined in the same definition use [ref]
|
| - * with the function reference as the first argument.
|
| - *
|
| - * Consider the following example to parse a list of numbers:
|
| - *
|
| - * class ListGrammarDefinition extends GrammarDefinition {
|
| - * start() => ref(list).end();
|
| - * list() => ref(element) & char(',') & ref(list)
|
| - * | ref(element);
|
| - * element() => digit().plus().flatten();
|
| - * }
|
| - *
|
| - * Since this is plain Dart code, common refactorings such as renaming a production
|
| - * updates all references correctly. Also code navigation and code completion
|
| - * works as expected.
|
| - *
|
| - * To attach custom production actions you might want to further subclass your
|
| - * grammar definition and override overriding the necessary productions defined
|
| - * in the superclass:
|
| - *
|
| - * class ListParserDefinition extends ListGrammarDefinition {
|
| - * element() => super.element().map((value) => int.parse(value));
|
| - * }
|
| - *
|
| - * Note that productions can be parametrized. Define such productions with positional
|
| - * arguments and reference to multiple instances by passing the arguments to [ref].
|
| - *
|
| - * Consider extending the above grammar with a parametrized token production:
|
| - *
|
| - * class TokenizedListGrammarDefinition extends GrammarDefinition {
|
| - * start() => ref(list).end();
|
| - * list() => ref(element) & ref(token, char(',')) & ref(list)
|
| - * | ref(element);
|
| - * element() => ref(token, digit().plus());
|
| - * token(p) => p.token().trim();
|
| - * }
|
| - */
|
| +/// Helper to conveniently define and build complex, recursive grammars using
|
| +/// plain Dart code.
|
| +///
|
| +/// To create a new grammar definition subclass [GrammarDefinition]. For every
|
| +/// production create a new method returning the primitive parser defining it.
|
| +/// The method called [start] is supposed to return the start production of the
|
| +/// grammar. To refer to a production defined in the same definition use [ref]
|
| +/// with the function reference as the first argument.
|
| +///
|
| +/// Consider the following example to parse a list of numbers:
|
| +///
|
| +/// class ListGrammarDefinition extends GrammarDefinition {
|
| +/// start() => ref(list).end();
|
| +/// list() => ref(element) & char(',') & ref(list)
|
| +/// | ref(element);
|
| +/// element() => digit().plus().flatten();
|
| +/// }
|
| +///
|
| +/// Since this is plain Dart code, common refactorings such as renaming a production
|
| +/// updates all references correctly. Also code navigation and code completion
|
| +/// works as expected.
|
| +///
|
| +/// To attach custom production actions you might want to further subclass your
|
| +/// grammar definition and override overriding the necessary productions defined
|
| +/// in the superclass:
|
| +///
|
| +/// class ListParserDefinition extends ListGrammarDefinition {
|
| +/// element() => super.element().map((value) => int.parse(value));
|
| +/// }
|
| +///
|
| +/// Note that productions can be parametrized. Define such productions with positional
|
| +/// arguments and reference to multiple instances by passing the arguments to [ref].
|
| +///
|
| +/// Consider extending the above grammar with a parametrized token production:
|
| +///
|
| +/// class TokenizedListGrammarDefinition extends GrammarDefinition {
|
| +/// start() => ref(list).end();
|
| +/// list() => ref(element) & ref(token, char(',')) & ref(list)
|
| +/// | ref(element);
|
| +/// element() => ref(token, digit().plus());
|
| +/// token(p) => p.token().trim();
|
| +/// }
|
| abstract class GrammarDefinition {
|
| const GrammarDefinition();
|
|
|
| - /**
|
| - * The starting production of this definition.
|
| - */
|
| + /// The starting production of this definition.
|
| Parser start();
|
|
|
| - /**
|
| - * Returns a parser reference to a production defined by a [function].
|
| - *
|
| - * The optional arguments parametrize the called production.
|
| - */
|
| + /// Returns a parser reference to a production defined by a [function].
|
| + ///
|
| + /// The optional arguments parametrize the called production.
|
| Parser ref(Function function, [arg1, arg2, arg3, arg4, arg5, arg6]) {
|
| var arguments = [arg1, arg2, arg3, arg4, arg5, arg6]
|
| .takeWhile((each) => each != null)
|
| @@ -64,20 +58,16 @@ abstract class GrammarDefinition {
|
| return new _Reference(function, arguments);
|
| }
|
|
|
| - /**
|
| - * Builds a composite parser from this definition.
|
| - *
|
| - * The optional [start] reference specifies a different starting production into
|
| - * the grammar. The optional [arguments] list parametrizes the called production.
|
| - */
|
| + /// Builds a composite parser from this definition.
|
| + ///
|
| + /// The optional [start] reference specifies a different starting production into
|
| + /// the grammar. The optional [arguments] list parametrizes the called production.
|
| Parser build({Function start: null, List arguments: const []}) {
|
| return _resolve(
|
| new _Reference(start != null ? start : this.start, arguments));
|
| }
|
|
|
| - /**
|
| - * Internal helper to resolve a complete parser graph.
|
| - */
|
| + /// Internal helper to resolve a complete parser graph.
|
| Parser _resolve(_Reference reference) {
|
| var mapping = new Map();
|
|
|
| @@ -122,9 +112,7 @@ abstract class GrammarDefinition {
|
| }
|
| }
|
|
|
| -/**
|
| - * A helper to build a parser from a {@link GrammarDefinition}.
|
| - */
|
| +/// A helper to build a parser from a {@link GrammarDefinition}.
|
| class GrammarParser extends DelegateParser {
|
| GrammarParser(GrammarDefinition definition) : super(definition.build());
|
| }
|
|
|