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

Unified Diff: pkg/servicec/lib/parser.dart

Issue 2035023003: Remove service-compiler related code. (Closed) Base URL: git@github.com:dartino/sdk.git@master
Patch Set: Created 4 years, 6 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 | « pkg/servicec/lib/node.dart ('k') | pkg/servicec/lib/scanner.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/servicec/lib/parser.dart
diff --git a/pkg/servicec/lib/parser.dart b/pkg/servicec/lib/parser.dart
deleted file mode 100644
index c5c0bf9a289a115cc761ba8c0aa92b5093ba9322..0000000000000000000000000000000000000000
--- a/pkg/servicec/lib/parser.dart
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright (c) 2015, the Dartino 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.
-
-library servicec.parser;
-
-import 'package:compiler/src/tokens/token.dart' show
- ErrorToken,
- KeywordToken,
- Token;
-
-import 'package:compiler/src/tokens/token_constants.dart' show
- EOF_TOKEN,
- IDENTIFIER_TOKEN,
- KEYWORD_TOKEN;
-
-import 'listener.dart' show
- Listener;
-
-import 'scanner.dart' show
- LF_TOKEN;
-
-/// Parser for the Dart service IDL, reusing the dart2js tokens.
-class Parser {
- Listener listener;
- Parser(this.listener);
-
- /// Entry point for the parser. The linked list [tokens] should be produced by
- /// the dart2js [Scanner].
- ///
- /// <unit> ::= <top-level-declaration>*
- Token parseUnit(Token tokens) {
- tokens = listener.beginCompilationUnit(tokens);
- int count = 0;
- while (valid(tokens)) {
- tokens = parseTopLevel(tokens);
- ++count;
- }
- tokens = listener.endCompilationUnit(tokens, count);
- return tokens;
- }
-
- /// A top-level declaration is a service or a struct.
- ///
- /// <top-level-declaration> ::= <service> | <struct>
- Token parseTopLevel(Token tokens) {
- tokens = listener.beginTopLevel(tokens);
- if (optional('service', tokens)) {
- tokens = parseService(tokens);
- } else if (optional('struct', tokens)) {
- tokens = parseStruct(tokens);
- } else {
- tokens = listener.expectedTopLevel(tokens);
- }
- tokens = listener.endTopLevel(tokens);
- return tokens;
- }
-
- /// A service contains the keyword, an identifier, and a body. The body is
- /// enclosed in {} and contains zero or more function declarations.
- ///
- /// <service> ::= 'service' <identifier> '{' <func-decl>* '}'
- Token parseService(Token tokens) {
- tokens = listener.beginService(skipNewLines(tokens));
- tokens = parseIdentifier(next(tokens));
- tokens = expect('{', tokens);
- int count = 0;
- if (valid(tokens)) {
- while (!optional('}', tokens)) {
- tokens = parseFunction(tokens);
- if (!valid(tokens)) break; // Don't count unsuccessful declarations
- ++count;
- }
- }
- tokens = expect('}', tokens);
- tokens = listener.endService(tokens, count);
- return tokens;
- }
-
- /// A struct contains the keyword, an identifier, and a body. The body is
- /// enclosed in {} and contains zero or more field declarations.
- ///
- /// <struct> ::= 'struct' <identifier> '{' <field-decl>* '}'
- Token parseStruct(Token tokens) {
- tokens = listener.beginStruct(skipNewLines(tokens));
- tokens = parseIdentifier(next(tokens));
- tokens = expect('{', tokens);
- int count = 0;
- if (valid(tokens)) {
- while (!optional('}', tokens)) {
- tokens = parseMember(tokens);
- if (!valid(tokens)) break; // Don't count unsuccessful declarations
- ++count;
- }
- }
- tokens = expect('}', tokens);
- tokens = listener.endStruct(tokens, count);
- return tokens;
- }
-
- Token parseIdentifier(Token tokens) {
- Token trimmedTokens = skipNewLines(tokens);
- if (isValidIdentifier(trimmedTokens)) {
- tokens = listener.handleIdentifier(trimmedTokens);
- } else {
- tokens = listener.expectedIdentifier(tokens);
- }
- return tokens;
- }
-
- /// A function declaration contains a type, an identifier, formal parameters,
- /// and a semicolon.
- ///
- /// <func-decl> ::= <type> <identifier> <formal-params> ';'
- Token parseFunction(Token tokens) {
- tokens = listener.beginFunction(tokens);
- tokens = parseType(tokens);
- tokens = parseIdentifier(tokens);
- tokens = expect('(', tokens);
- int count = 0;
- if (!optional(')', tokens)) {
- tokens = parseFormal(tokens);
- ++count;
- while (optional(',', tokens)) {
- tokens = next(tokens);
- tokens = parseFormal(tokens);
- ++count;
- }
- }
- tokens = expect(')', tokens);
- tokens = expect(';', tokens);
- tokens = listener.endFunction(tokens, count);
- return tokens;
- }
-
- // Parse a struct member that can be either a field or a union.
- Token parseMember(Token tokens) {
- if (optional('union', tokens)) {
- tokens = parseUnion(tokens);
- } else {
- tokens = parseField(tokens);
- }
- return tokens;
- }
-
- /// A union contains the 'union' keyword and a list of fields, enclosed in
- /// curly braces.
- ///
- /// <union> ::= 'union' '{' <field>* '}'
- Token parseUnion(Token tokens) {
- tokens = listener.beginUnion(tokens);
- tokens = expect('{', next(tokens));
- int count = 0;
- if (valid(tokens)) {
- while (!optional('}', tokens)) {
- tokens = parseField(tokens);
- if (!valid(tokens)) break; // Don't count unsuccessful declarations
- ++count;
- }
- }
- tokens = expect('}', tokens);
- tokens = listener.endUnion(tokens, count);
- return tokens;
- }
-
- /// A field contains a type, an identifier, and a semicolon.
- ///
- /// <field-decl> ::= <type> <identifier> ';'
- Token parseField(Token tokens) {
- tokens = listener.beginField(tokens);
- tokens = parseType(tokens);
- tokens = parseIdentifier(tokens);
- tokens = expect(';', tokens);
- tokens = listener.endField(tokens);
- return tokens;
- }
-
- Token parseType(Token tokens) {
- tokens = listener.beginType(tokens);
- tokens = parseIdentifier(tokens);
- if (optional('*', tokens)) {
- // Push a simple type on the stack.
- tokens = listener.handleSimpleType(tokens);
- tokens = next(tokens);
- // Pop the simple type and push a pointer type.
- tokens = listener.handlePointerType(tokens);
- } else if (optional('<', tokens)) {
- tokens = next(tokens);
- tokens = parseType(tokens);
- tokens = expect('>', tokens);
- tokens = listener.handleListType(tokens);
- } else {
- tokens = listener.handleSimpleType(tokens);
- }
- tokens = listener.endType(tokens);
- return tokens;
- }
-
- /// A formal contains a type and an identifier.
- ///
- /// <param> ::= <type> <identifier>
- Token parseFormal(Token tokens) {
- tokens = listener.beginFormal(tokens);
- tokens = parseType(tokens);
- tokens = parseIdentifier(tokens);
- tokens = listener.endFormal(tokens);
- return tokens;
- }
-
- bool isValidIdentifier(Token tokens) {
- tokens = skipNewLines(tokens);
- return tokens.kind == IDENTIFIER_TOKEN;
- }
-
- Token skipNewLines(Token tokens) {
- while (tokens.kind == LF_TOKEN) {
- tokens = tokens.next;
- }
- return tokens;
- }
-
- /// Returns true if the [tokens] is a SymbolToken or a KeywordToken with
- /// stringValue [string].
- bool optional(String string, Token tokens) {
- tokens = skipNewLines(tokens);
- return string == tokens.stringValue;
- }
-
- /// Checks that the [tokens] is a SymbolToken or a KeywordToken with
- /// stringValue [value].
- Token expect(String string, Token tokens) {
- tokens = skipNewLines(tokens);
- if (string != tokens.stringValue) {
- tokens = listener.expected(string, tokens);
- } else {
- tokens = next(tokens);
- }
- return tokens;
- }
-
- bool valid(Token tokens) {
- tokens = skipNewLines(tokens);
- return tokens.kind != EOF_TOKEN && tokens is! ErrorToken;
- }
-
- Token next(Token tokens) => skipNewLines(skipNewLines(tokens).next);
-}
« no previous file with comments | « pkg/servicec/lib/node.dart ('k') | pkg/servicec/lib/scanner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698