Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(954)

Unified Diff: petitparser/lib/src/dart/grammar.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « petitparser/lib/src/core/token.dart ('k') | petitparser/lib/src/debug/continuation.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: petitparser/lib/src/dart/grammar.dart
diff --git a/petitparser/lib/src/dart/grammar.dart b/petitparser/lib/src/dart/grammar.dart
deleted file mode 100644
index 187ecfa3c8759837acf01841ee7579d885d9f398..0000000000000000000000000000000000000000
--- a/petitparser/lib/src/dart/grammar.dart
+++ /dev/null
@@ -1,788 +0,0 @@
-part of dart;
-
-/**
- * Dart grammar.
- */
-class DartGrammar extends GrammarParser {
- DartGrammar() : super(new DartGrammarDefinition());
-}
-
-/**
- * Dart grammar definition.
- *
- * Adapted from [https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/language/grammar/Dart.g].
- */
-class DartGrammarDefinition extends GrammarDefinition {
-
- Parser token(input) {
- if (input is String) {
- input = input.length == 1 ? char(input) : string(input);
- } else if (input is Function) {
- input = ref(input);
- }
- if (input is! Parser && input is TrimmingParser) {
- throw new StateError('Invalid token parser: $input');
- }
- return input.token().trim(ref(HIDDEN));
- }
-
-
- // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
- // for details. All rights reserved. Use of this source code is governed by a
- // BSD-style license that can be found in the LICENSE file.
-
- // -----------------------------------------------------------------
- // Keyword definitions.
- // -----------------------------------------------------------------
- BREAK() => ref(token, 'break');
- CASE() => ref(token, 'case');
- CATCH() => ref(token, 'catch');
- CONST() => ref(token, 'const');
- CONTINUE() => ref(token, 'continue');
- DEFAULT() => ref(token, 'default');
- DO() => ref(token, 'do');
- ELSE() => ref(token, 'else');
- FALSE() => ref(token, 'false');
- FINAL() => ref(token, 'final');
- FINALLY() => ref(token, 'finally');
- FOR() => ref(token, 'for');
- IF() => ref(token, 'if');
- IN() => ref(token, 'in');
- NEW() => ref(token, 'new');
- NULL() => ref(token, 'null');
- RETURN() => ref(token, 'return');
- SUPER() => ref(token, 'super');
- SWITCH() => ref(token, 'switch');
- THIS() => ref(token, 'this');
- THROW() => ref(token, 'throw');
- TRUE() => ref(token, 'true');
- TRY() => ref(token, 'try');
- VAR() => ref(token, 'var');
- VOID() => ref(token, 'void');
- WHILE() => ref(token, 'while');
-
- // Pseudo-keywords that should also be valid identifiers.
- ABSTRACT() => ref(token, 'abstract');
- ASSERT() => ref(token, 'assert');
- CLASS() => ref(token, 'class');
- EXTENDS() => ref(token, 'extends');
- FACTORY() => ref(token, 'factory');
- GET() => ref(token, 'get');
- IMPLEMENTS() => ref(token, 'implements');
- IMPORT() => ref(token, 'import');
- INTERFACE() => ref(token, 'interface');
- IS() => ref(token, 'is');
- LIBRARY() => ref(token, 'library');
- NATIVE() => ref(token, 'native');
- NEGATE() => ref(token, 'negate');
- OPERATOR() => ref(token, 'operator');
- SET() => ref(token, 'set');
- SOURCE() => ref(token, 'source');
- STATIC() => ref(token, 'static');
- TYPEDEF() => ref(token, 'typedef');
-
- // -----------------------------------------------------------------
- // Grammar productions.
- // -----------------------------------------------------------------
- start() => ref(compilationUnit).end();
-
- compilationUnit() =>
- ref(HASHBANG).optional()
- & ref(directive).star()
- & ref(topLevelDefinition).star();
-
- directive() =>
- ref(token, '#')
- & ref(identifier)
- & ref(arguments)
- & ref(token, ';');
-
- topLevelDefinition() =>
- ref(classDefinition)
- | ref(interfaceDefinition)
- | ref(functionTypeAlias)
- | ref(functionDeclaration) & ref(functionBodyOrNative)
- | ref(returnType).optional() & ref(getOrSet) & ref(identifier) & ref(formalParameterList) & ref(functionBodyOrNative)
- | ref(FINAL) & ref(type).optional() & ref(staticFinalDeclarationList) & ref(token, ';')
- | ref(constInitializedVariableDeclaration) & ref(token, ';');
-
- classDefinition() =>
- ref(CLASS) & ref(identifier) & ref(typeParameters).optional() & ref(superclass).optional() & ref(interfaces).optional() &
- ref(token, '{') & ref(classMemberDefinition).star() & ref(token, '}')
- | ref(CLASS) & ref(identifier) & ref(typeParameters).optional() & ref(interfaces).optional() & ref(NATIVE) & ref(token, STRING) &
- ref(token, '{') & ref(classMemberDefinition).star() & ref(token, '}');
-
- typeParameter() => ref(identifier) & (ref(EXTENDS) & ref(type)).optional();
-
- typeParameters() => ref(token, '<') & ref(typeParameter) & (ref(token, ',') & ref(typeParameter)).star() & ref(token, '>');
-
- superclass() => ref(EXTENDS) & ref(type);
-
- interfaces() => ref(IMPLEMENTS) & ref(typeList);
-
- superinterfaces() => ref(EXTENDS) & ref(typeList);
-
- // This rule is organized in a way that may not be most readable, but
- // gives the best error messages.
- classMemberDefinition() =>
- ref(declaration) & ref(token, ';')
- | ref(constructorDeclaration) & ref(token, ';')
- | ref(methodDeclaration) & ref(functionBodyOrNative)
- | ref(CONST) & ref(factoryConstructorDeclaration) & ref(functionNative);
-
- functionBodyOrNative() =>
- ref(NATIVE) & ref(functionBody)
- | ref(functionNative)
- | ref(functionBody);
-
- functionNative() => ref(NATIVE) & ref(token, STRING).optional() & ref(token, ';');
-
- // A method, operator, or constructor (which all should be followed by
- // a block of code).
- methodDeclaration() =>
- ref(factoryConstructorDeclaration)
- | ref(STATIC) & ref(functionDeclaration)
- | ref(specialSignatureDefinition)
- | ref(functionDeclaration) & ref(initializers).optional()
- | ref(namedConstructorDeclaration) & ref(initializers).optional();
-
-// An abstract method/operator, a field, or const constructor (which
-// all should be followed by a semicolon).
- declaration() =>
- ref(constantConstructorDeclaration) & (ref(redirection) | ref(initializers)).optional()
- | ref(functionDeclaration) & ref(redirection)
- | ref(namedConstructorDeclaration) & ref(redirection)
- | ref(ABSTRACT) & ref(specialSignatureDefinition)
- | ref(ABSTRACT) & ref(functionDeclaration)
- | ref(STATIC) & ref(FINAL) & ref(type).optional() & ref(staticFinalDeclarationList)
- | ref(STATIC).optional() & ref(constInitializedVariableDeclaration);
-
- initializers() => ref(token, ':') & ref(superCallOrFieldInitializer) & (ref(token, ',') & ref(superCallOrFieldInitializer)).star();
-
- redirection() => ref(token, ':') & ref(THIS) & (ref(token, '.') & ref(identifier)).optional() & ref(arguments);
-
- fieldInitializer() => (ref(THIS) & ref(token, '.')).optional() & ref(identifier) & ref(token, '=') & ref(conditionalExpression);
-
- superCallOrFieldInitializer() =>
- ref(SUPER) & ref(arguments)
- | ref(SUPER) & ref(token, '.') & ref(identifier) & ref(arguments)
- | ref(fieldInitializer);
-
- staticFinalDeclarationList() => ref(staticFinalDeclaration) & (ref(token, ',') & ref(staticFinalDeclaration)).star();
-
- staticFinalDeclaration() => ref(identifier) & ref(token, '=') & ref(constantExpression);
-
- interfaceDefinition() => ref(INTERFACE) & ref(identifier) & ref(typeParameters).optional() &
- ref(superinterfaces).optional() & ref(factorySpecification).optional() & ref(token, '{') &
- ref(interfaceMemberDefinition).star() & ref(token, '}');
-
- factorySpecification() => ref(FACTORY) & ref(type);
-
- functionTypeAlias() => ref(TYPEDEF) & ref(functionPrefix) & ref(typeParameters).optional() &
- ref(formalParameterList) & ref(token, ';');
-
- interfaceMemberDefinition() =>
- ref(STATIC) & ref(FINAL) & ref(type).optional() & ref(initializedIdentifierList) & ref(token, ';')
- | ref(functionDeclaration) & ref(token, ';')
- | ref(constantConstructorDeclaration) & ref(token, ';')
- | ref(namedConstructorDeclaration) & ref(token, ';')
- | ref(specialSignatureDefinition) & ref(token, ';')
- | ref(variableDeclaration) & ref(token, ';');
-
- factoryConstructorDeclaration() => ref(FACTORY) & ref(qualified) & ref(typeParameters).optional() &
- (ref(token, '.') & ref(identifier)).optional() & ref(formalParameterList);
-
- namedConstructorDeclaration() => ref(identifier) & ref(token, '.') & ref(identifier) &
- ref(formalParameterList);
-
- constructorDeclaration() =>
- ref(identifier) & ref(formalParameterList) & (ref(redirection) | ref(initializers)).optional()
- | ref(namedConstructorDeclaration) & (ref(redirection) | ref(initializers)).optional();
-
- constantConstructorDeclaration() => ref(CONST) & ref(qualified) & ref(formalParameterList);
-
- specialSignatureDefinition() =>
- ref(STATIC).optional() & ref(returnType).optional() & ref(getOrSet) & ref(identifier) & ref(formalParameterList)
- | ref(returnType).optional() & ref(OPERATOR) & ref(userDefinableOperator) & ref(formalParameterList);
-
- getOrSet() => ref(GET) | ref(SET);
-
- userDefinableOperator() =>
- ref(multiplicativeOperator)
- | ref(additiveOperator)
- | ref(shiftOperator)
- | ref(relationalOperator)
- | ref(bitwiseOperator)
- | ref(token, '==') // Disallow negative and === equality checks.
- | ref(token, '~') // Disallow ! operator.
- | ref(NEGATE)
- | ref(token, '[') & ref(token, ']')
- | ref(token, '[') & ref(token, ']') & ref(token, '=');
-
- prefixOperator() =>
- ref(additiveOperator)
- | ref(negateOperator);
-
- postfixOperator() =>
- ref(incrementOperator);
-
- negateOperator() =>
- ref(token, '!')
- | ref(token, '~');
-
- multiplicativeOperator() =>
- ref(token, '*')
- | ref(token, '/')
- | ref(token, '%')
- | ref(token, '~/');
-
- assignmentOperator() =>
- ref(token, '=')
- | ref(token, '*=')
- | ref(token, '/=')
- | ref(token, '~/=')
- | ref(token, '%=')
- | ref(token, '+=')
- | ref(token, '-=')
- | ref(token, '<<=')
- | ref(token, '>') & ref(token, '>') & ref(token, '>') & ref(token, '=')
- | ref(token, '>') & ref(token, '>') & ref(token, '=')
- | ref(token, '&=')
- | ref(token, '^=')
- | ref(token, '|=');
-
- additiveOperator() =>
- ref(token, '+')
- | ref(token, '-');
-
- incrementOperator() =>
- ref(token, '++')
- | ref(token, '--');
-
- shiftOperator() =>
- ref(token, '<<')
- | ref(token, '>') & ref(token, '>') & ref(token, '>')
- | ref(token, '>') & ref(token, '>');
-
- relationalOperator() =>
- ref(token, '>') & ref(token, '=')
- | ref(token, '>')
- | ref(token, '<=')
- | ref(token, '<');
-
- equalityOperator() =>
- ref(token, '==')
- | ref(token, '!=')
- | ref(token, '===')
- | ref(token, '!==');
-
- bitwiseOperator() =>
- ref(token, '&')
- | ref(token, '^')
- | ref(token, '|');
-
- formalParameterList() =>
- ref(token, '(') & ref(namedFormalParameters).optional() & ref(token, ')')
- | ref(token, '(') & ref(normalFormalParameter) & ref(normalFormalParameterTail).optional() & ref(token, ')');
-
- normalFormalParameterTail() =>
- ref(token, ',') & ref(namedFormalParameters)
- | ref(token, ',') & ref(normalFormalParameter) & ref(normalFormalParameterTail).optional();
-
- normalFormalParameter() =>
- ref(functionDeclaration)
- | ref(fieldFormalParameter)
- | ref(simpleFormalParameter);
-
- simpleFormalParameter() =>
- ref(declaredIdentifier)
- | ref(identifier);
-
- fieldFormalParameter() =>
- ref(finalVarOrType).optional() & ref(THIS) & ref(token, '.') & ref(identifier);
-
- namedFormalParameters() =>
- ref(token, '[') & ref(defaultFormalParameter) & (ref(token, ',') & ref(defaultFormalParameter)).star() & ref(token, ']');
-
- defaultFormalParameter() =>
- ref(normalFormalParameter) & (ref(token, '=') & ref(constantExpression)).optional();
-
- returnType() =>
- ref(VOID)
- | ref(type);
-
- finalVarOrType() =>
- ref(FINAL) & ref(type).optional()
- | ref(VAR)
- | ref(type)
- ;
-
- // We have to introduce a separate rule for 'declared' identifiers to
- // allow ANTLR to decide if the first identifier we encounter after
- // final is a type or an identifier. Before this change, we used the
- // production 'finalVarOrType identifier' in numerous places.
- declaredIdentifier() =>
- ref(FINAL) & ref(type).optional() & ref(identifier)
- | ref(VAR) & ref(identifier)
- | ref(type) & ref(identifier)
- ;
-
- identifier() => ref(token, ref(IDENTIFIER)
- | ref(ABSTRACT)
- | ref(ASSERT)
- | ref(CLASS)
- | ref(EXTENDS)
- | ref(FACTORY)
- | ref(GET)
- | ref(IMPLEMENTS)
- | ref(IMPORT)
- | ref(INTERFACE)
- | ref(IS)
- | ref(LIBRARY)
- | ref(NATIVE)
- | ref(NEGATE)
- | ref(OPERATOR)
- | ref(SET)
- | ref(SOURCE)
- | ref(STATIC)
- | ref(TYPEDEF)
- );
-
- qualified() =>
- ref(identifier) & (ref(token, '.') & ref(identifier)).optional()
- ;
-
- type() =>
- ref(qualified) & ref(typeArguments).optional()
- ;
-
- typeArguments() =>
- ref(token, '<') & ref(typeList) & ref(token, '>')
- ;
-
- typeList() =>
- ref(type) & (ref(token, ',') & ref(type)).star()
- ;
-
- block() =>
- ref(token, '{') & ref(statements) & ref(token, '}')
- ;
-
- statements() =>
- ref(statement).star()
- ;
-
- statement() =>
- ref(label).star() & ref(nonLabelledStatement)
- ;
-
- nonLabelledStatement() =>
- ref(block)
- | ref(initializedVariableDeclaration) & ref(token, ';')
- | ref(iterationStatement)
- | ref(selectionStatement)
- | ref(tryStatement)
- | ref(BREAK) & ref(identifier).optional() & ref(token, ';')
- | ref(CONTINUE) & ref(identifier).optional() & ref(token, ';')
- | ref(RETURN) & ref(expression).optional() & ref(token, ';')
- | ref(THROW) & ref(expression).optional() & ref(token, ';')
- | ref(expression).optional() & ref(token, ';')
- | ref(ASSERT) & ref(token, '(') & ref(conditionalExpression) & ref(token, ')') & ref(token, ';')
- | ref(functionDeclaration) & ref(functionBody)
- ;
-
- label() =>
- ref(identifier) & ref(token, ':')
- ;
-
- iterationStatement() =>
- ref(WHILE) & ref(token, '(') & ref(expression) & ref(token, ')') & ref(statement)
- | ref(DO) & ref(statement) & ref(WHILE) & ref(token, '(') & ref(expression) & ref(token, ')') & ref(token, ';')
- | ref(FOR) & ref(token, '(') & ref(forLoopParts) & ref(token, ')') & ref(statement)
- ;
-
- forLoopParts() =>
- ref(forInitializerStatement) & ref(expression).optional() & ref(token, ';') & ref(expressionList).optional()
- | ref(declaredIdentifier) & ref(IN) & ref(expression)
- | ref(identifier) & ref(IN) & ref(expression)
- ;
-
- forInitializerStatement() =>
- ref(initializedVariableDeclaration) & ref(token, ';')
- | ref(expression).optional() & ref(token, ';')
- ;
-
- selectionStatement() =>
- ref(IF) & ref(token, '(') & ref(expression) & ref(token, ')') & ref(statement) & (ref(ELSE) & ref(statement)).optional()
- | ref(SWITCH) & ref(token, '(') & ref(expression) & ref(token, ')') & ref(token, '{') & ref(switchCase).star() & ref(defaultCase).optional() & ref(token, '}')
- ;
-
- switchCase() =>
- ref(label).optional() & (ref(CASE) & ref(expression) & ref(token, ':')).plus() & ref(statements)
- ;
-
- defaultCase() =>
- ref(label).optional() & (ref(CASE) & ref(expression) & ref(token, ':')).star() & ref(DEFAULT) & ref(token, ':') & ref(statements)
- ;
-
- tryStatement() =>
- ref(TRY) & ref(block) & (ref(catchPart).plus() & ref(finallyPart).optional() | ref(finallyPart))
- ;
-
- catchPart() =>
- ref(CATCH) & ref(token, '(') & ref(declaredIdentifier) & (ref(token, ',') & ref(declaredIdentifier)).optional() & ref(token, ')') & ref(block)
- ;
-
- finallyPart() =>
- ref(FINALLY) & ref(block)
- ;
-
- variableDeclaration() =>
- ref(declaredIdentifier) & (ref(token, ',') & ref(identifier)).star()
- ;
-
- initializedVariableDeclaration() =>
- ref(declaredIdentifier) & (ref(token, '=') & ref(expression)).optional() & (ref(token, ',') & ref(initializedIdentifier)).star()
- ;
-
- initializedIdentifierList() =>
- ref(initializedIdentifier) & (ref(token, ',') & ref(initializedIdentifier)).star()
- ;
-
- initializedIdentifier() =>
- ref(identifier) & (ref(token, '=') & ref(expression)).optional()
- ;
-
- constInitializedVariableDeclaration() =>
- ref(declaredIdentifier) & (ref(token, '=') & ref(constantExpression)).optional() &
- (ref(token, ',') & ref(constInitializedIdentifier)).star()
- ;
-
- constInitializedIdentifier() =>
- ref(identifier) & (ref(token, '=') & ref(constantExpression)).optional()
- ;
-
- // The constant expression production is used to mark certain expressions
- // as only being allowed to hold a compile-time constant. The grammar cannot
- // express these restrictions (yet), so this will have to be enforced by a
- // separate analysis phase.
- constantExpression() =>
- ref(expression)
- ;
-
- expression() =>
- ref(assignableExpression) & ref(assignmentOperator) & ref(expression)
- | ref(conditionalExpression)
- ;
-
- expressionList() =>
- ref(expression) & (ref(token, ',') & ref(expression)).star()
- ;
-
- arguments() =>
- ref(token, '(') & ref(argumentList).optional() & ref(token, ')')
- ;
-
- argumentList() =>
- ref(namedArgument) & (ref(token, ',') & ref(namedArgument)).star()
- | ref(expressionList) & (ref(token, ',') & ref(namedArgument)).star()
- ;
-
- namedArgument() =>
- ref(label) & ref(expression)
- ;
-
- assignableExpression() =>
- ref(primary) & (ref(arguments).star() & ref(assignableSelector)).plus()
- | ref(SUPER) & ref(assignableSelector)
- | ref(identifier)
- ;
-
- conditionalExpression() =>
- ref(logicalOrExpression) & (ref(token, '?') & ref(expression) & ref(token, ':') & ref(expression)).optional()
- ;
-
- logicalOrExpression() =>
- ref(logicalAndExpression) & (ref(token, '||') & ref(logicalAndExpression)).star()
- ;
-
- logicalAndExpression() =>
- ref(bitwiseOrExpression) & (ref(token, '&&') & ref(bitwiseOrExpression)).star()
- ;
-
- bitwiseOrExpression() =>
- ref(bitwiseXorExpression) & (ref(token, '|') & ref(bitwiseXorExpression)).star()
- | ref(SUPER) & (ref(token, '|') & ref(bitwiseXorExpression)).plus()
- ;
-
- bitwiseXorExpression() =>
- ref(bitwiseAndExpression) & (ref(token, '^') & ref(bitwiseAndExpression)).star()
- | ref(SUPER) & (ref(token, '^') & ref(bitwiseAndExpression)).plus()
- ;
-
- bitwiseAndExpression() =>
- ref(equalityExpression) & (ref(token, '&') & ref(equalityExpression)).star()
- | ref(SUPER) & (ref(token, '&') & ref(equalityExpression)).plus()
- ;
-
- equalityExpression() =>
- ref(relationalExpression) & (ref(equalityOperator) & ref(relationalExpression)).optional()
- | ref(SUPER) & ref(equalityOperator) & ref(relationalExpression)
- ;
-
- relationalExpression() =>
- ref(shiftExpression) & (ref(isOperator) & ref(type) | ref(relationalOperator) & ref(shiftExpression)).optional()
- | ref(SUPER) & ref(relationalOperator) & ref(shiftExpression)
- ;
-
- isOperator() =>
- ref(IS) & ref(token, '!').optional()
- ;
-
- shiftExpression() =>
- ref(additiveExpression) & (ref(shiftOperator) & ref(additiveExpression)).star()
- | ref(SUPER) & (ref(shiftOperator) & ref(additiveExpression)).plus()
- ;
-
- additiveExpression() =>
- ref(multiplicativeExpression) & (ref(additiveOperator) & ref(multiplicativeExpression)).star()
- | ref(SUPER) & (ref(additiveOperator) & ref(multiplicativeExpression)).plus()
- ;
-
- multiplicativeExpression() =>
- ref(unaryExpression) & (ref(multiplicativeOperator) & ref(unaryExpression)).star()
- | ref(SUPER) & (ref(multiplicativeOperator) & ref(unaryExpression)).plus()
- ;
-
- unaryExpression() =>
- ref(postfixExpression)
- | ref(prefixOperator) & ref(unaryExpression)
- | ref(negateOperator) & ref(SUPER)
- | ref(token, '-') & ref(SUPER)
- | ref(incrementOperator) & ref(assignableExpression)
- ;
-
- postfixExpression() =>
- ref(assignableExpression) & ref(postfixOperator)
- | ref(primary) & ref(selector).star()
- ;
-
- selector() =>
- ref(assignableSelector)
- | ref(arguments)
- ;
-
- assignableSelector() =>
- ref(token, '[') & ref(expression) & ref(token, ']')
- | ref(token, '.') & ref(identifier)
- ;
-
- primary() =>
- ref(primaryNoFE)
- | ref(primaryFE)
- ;
-
- primaryFE() =>
- ref(functionExpression)
- | ref(primaryNoFE)
- ;
-
- primaryNoFE() =>
- ref(THIS)
- | ref(SUPER) & ref(assignableSelector)
- | ref(literal)
- | ref(identifier)
- | ref(CONST).optional() & ref(typeArguments).optional() & ref(compoundLiteral)
- | (ref(NEW) | ref(CONST)) & ref(type) & (ref(token, '.') & ref(identifier)).optional() & ref(arguments)
- | ref(expressionInParentheses)
- ;
-
- expressionInParentheses() =>
- ref(token, '(') & ref(expression) & ref(token, ')')
- ;
-
- literal() => ref(token,
- ref(NULL)
- | ref(TRUE)
- | ref(FALSE)
- | ref(HEX_NUMBER)
- | ref(NUMBER)
- | ref(STRING))
- ;
-
- compoundLiteral() =>
- ref(listLiteral)
- | ref(mapLiteral)
- ;
-
- listLiteral() =>
- ref(token, '[') & (ref(expressionList) & ref(token, ',').optional()).optional() & ref(token, ']')
- ;
-
- mapLiteral() =>
- ref(token, '{') & (ref(mapLiteralEntry) & (ref(token, ',') & ref(mapLiteralEntry)).star() & ref(token, ',').optional()).optional() & ref(token, '}')
- ;
-
- mapLiteralEntry() =>
- ref(token, STRING) & ref(token, ':') & ref(expression)
- ;
-
- functionExpression() =>
- (ref(returnType).optional() & ref(identifier)).optional() & ref(formalParameterList) & ref(functionExpressionBody)
- ;
-
- functionDeclaration() =>
- ref(returnType).optional() & ref(identifier) & ref(formalParameterList)
- ;
-
- functionPrefix() =>
- ref(returnType).optional() & ref(identifier)
- ;
-
- functionBody() =>
- ref(token, '=>') & ref(expression) & ref(token, ';')
- | ref(block)
- ;
-
- functionExpressionBody() =>
- ref(token, '=>') & ref(expression)
- | ref(block)
- ;
-
- // -----------------------------------------------------------------
- // Library files.
- // -----------------------------------------------------------------
- libraryUnit() =>
- ref(libraryDefinition).end()
- ;
-
- libraryDefinition() =>
- ref(LIBRARY) & ref(token, '{') & ref(libraryBody) & ref(token, '}')
- ;
-
- libraryBody() =>
- ref(libraryImport).optional() & ref(librarySource).optional()
- ;
-
- libraryImport() =>
- ref(IMPORT) & ref(token, '=') & ref(token, '[') & ref(importReferences).optional() & ref(token, ']')
- ;
-
- importReferences() =>
- ref(importReference) & (ref(token, ',') & ref(importReference)).star() & ref(token, ',').optional()
- ;
-
- importReference() =>
- (ref(token, IDENTIFIER) & ref(token, ':')).optional() & ref(token, STRING)
- ;
-
- librarySource() =>
- ref(SOURCE) & ref(token, '=') & ref(token, '[') & ref(sourceUrls).optional() & ref(token, ']')
- ;
-
- sourceUrls() =>
- ref(token, STRING) & (ref(token, ',') & ref(token, STRING)).star() & ref(token, ',').optional()
- ;
-
-
- // -----------------------------------------------------------------
- // Lexical tokens.
- // -----------------------------------------------------------------
- IDENTIFIER_NO_DOLLAR() =>
- ref(IDENTIFIER_START_NO_DOLLAR) & ref(IDENTIFIER_PART_NO_DOLLAR).star()
- ;
-
- IDENTIFIER() =>
- ref(IDENTIFIER_START) & ref(IDENTIFIER_PART).star()
- ;
-
- HEX_NUMBER() =>
- string('0x') & ref(HEX_DIGIT).plus()
- | string('0X') & ref(HEX_DIGIT).plus()
- ;
-
- NUMBER() =>
- ref(DIGIT).plus() & ref(NUMBER_OPT_FRACTIONAL_PART) & ref(EXPONENT).optional() & ref(NUMBER_OPT_ILLEGAL_END)
- | char('.') & ref(DIGIT).plus() & ref(EXPONENT).optional() & ref(NUMBER_OPT_ILLEGAL_END)
- ;
-
- NUMBER_OPT_FRACTIONAL_PART() =>
- char('.') & ref(DIGIT).plus()
- | epsilon()
- ;
-
- NUMBER_OPT_ILLEGAL_END() => epsilon();
-// ref(IDENTIFIER_START).end()
-// | epsilon()
-// ;
-
- HEX_DIGIT() => pattern('0-9a-fA-F');
-
- IDENTIFIER_START() => ref(IDENTIFIER_START_NO_DOLLAR) | char('\$');
-
- IDENTIFIER_START_NO_DOLLAR() => ref(LETTER) | char('_');
-
- IDENTIFIER_PART_NO_DOLLAR() => ref(IDENTIFIER_START_NO_DOLLAR) | ref(DIGIT);
-
- IDENTIFIER_PART() => ref(IDENTIFIER_START) | ref(DIGIT);
-
- LETTER() => letter();
-
- DIGIT() => digit();
-
- EXPONENT() => pattern('eE') & pattern('+-').optional() & ref(DIGIT).plus();
-
- STRING() =>
- char('@').optional() & ref(MULTI_LINE_STRING)
- | ref(SINGLE_LINE_STRING)
- ;
-
- MULTI_LINE_STRING() =>
- string('"""') & any().starLazy(string('"""')) & string('"""')
- | string("'''") & any().starLazy(string("'''")) & string("'''")
- ;
-
- SINGLE_LINE_STRING() =>
- char('"') & ref(STRING_CONTENT_DQ).star() & char('"')
- | char("'") & ref(STRING_CONTENT_SQ).star() & char("'")
- | string('@"') & pattern('^"\n\r').star() & char('"')
- | string("@'") & pattern("^'\n\r").star() & char("'")
- ;
-
- STRING_CONTENT_DQ() =>
- pattern('^\\"\n\r')
- | char('\\') & pattern('\n\r')
- ;
-
- STRING_CONTENT_SQ() =>
- pattern("^\\'\n\r")
- | char('\\') & pattern('\n\r')
- ;
-
- NEWLINE() => pattern('\n\r');
-
- HASHBANG() => string('#!') & pattern('^\n\r').star() & ref(NEWLINE).optional();
-
-
- // -----------------------------------------------------------------
- // Whitespace and comments.
- // -----------------------------------------------------------------
- HIDDEN() => ref(HIDDEN_STUFF).plus();
-
- HIDDEN_STUFF() => ref(WHITESPACE)
- | ref(SINGLE_LINE_COMMENT)
- | ref(MULTI_LINE_COMMENT)
- ;
-
- WHITESPACE() => whitespace();
-
- SINGLE_LINE_COMMENT() => string('//')
- & ref(NEWLINE).neg().star()
- & ref(NEWLINE).optional()
- ;
-
- MULTI_LINE_COMMENT() => string('/*')
- & (ref(MULTI_LINE_COMMENT) | string('*/').neg()).star() & string('*/')
- ;
-
-}
« no previous file with comments | « petitparser/lib/src/core/token.dart ('k') | petitparser/lib/src/debug/continuation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698