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

Unified Diff: pkg/front_end/lib/src/fasta/scanner/keyword.dart

Issue 2797133008: merge fasta.Keyword into analyzer.Keyword (Closed)
Patch Set: rebase Created 3 years, 8 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
Index: pkg/front_end/lib/src/fasta/scanner/keyword.dart
diff --git a/pkg/front_end/lib/src/fasta/scanner/keyword.dart b/pkg/front_end/lib/src/fasta/scanner/keyword.dart
deleted file mode 100644
index 430484e737ee1180d654d2880ab3ccbe23492238..0000000000000000000000000000000000000000
--- a/pkg/front_end/lib/src/fasta/scanner/keyword.dart
+++ /dev/null
@@ -1,315 +0,0 @@
-// 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.
-
-library fasta.scanner.keywords;
-
-import '../../scanner/token.dart' as analyzer;
-
-import 'characters.dart' show $a, $z, $A, $Z;
-
-import 'precedence.dart' show PrecedenceInfo;
-
-import 'precedence.dart' show AS_INFO, IS_INFO, KEYWORD_INFO;
-
-/**
- * A keyword in the Dart programming language.
- */
-class Keyword extends analyzer.Keyword {
- static const ASSERT = const Keyword("assert");
- static const BREAK = const Keyword("break");
- static const CASE = const Keyword("case");
- static const CATCH = const Keyword("catch");
- static const CLASS = const Keyword("class");
- static const CONST = const Keyword("const");
- static const CONTINUE = const Keyword("continue");
- static const DEFAULT = const Keyword("default");
- static const DO = const Keyword("do");
- static const ELSE = const Keyword("else");
- static const ENUM = const Keyword("enum");
- static const EXTENDS = const Keyword("extends");
- static const FALSE = const Keyword("false");
- static const FINAL = const Keyword("final");
- static const FINALLY = const Keyword("finally");
- static const FOR = const Keyword("for");
- static const IF = const Keyword("if");
- static const IN = const Keyword("in");
- static const NEW = const Keyword("new");
- static const NULL = const Keyword("null");
- static const RETHROW = const Keyword("rethrow");
- static const RETURN = const Keyword("return");
- static const SUPER = const Keyword("super");
- static const SWITCH = const Keyword("switch");
- static const THIS = const Keyword("this");
- static const THROW = const Keyword("throw");
- static const TRUE = const Keyword("true");
- static const TRY = const Keyword("try");
- static const VAR = const Keyword("var");
- static const VOID = const Keyword("void");
- static const WHILE = const Keyword("while");
- static const WITH = const Keyword("with");
-
- // TODO(ahe): Don't think this is a reserved word.
- // See: http://dartbug.com/5579
- static const IS = const Keyword("is", info: IS_INFO);
-
- static const ABSTRACT = const Keyword("abstract", isBuiltIn: true);
- static const AS = const Keyword("as", info: AS_INFO, isBuiltIn: true);
- static const COVARIANT = const Keyword("covariant", isBuiltIn: true);
- static const DYNAMIC = const Keyword("dynamic", isBuiltIn: true);
- static const EXPORT = const Keyword("export", isBuiltIn: true);
- static const EXTERNAL = const Keyword("external", isBuiltIn: true);
- static const FACTORY = const Keyword("factory", isBuiltIn: true);
- static const GET = const Keyword("get", isBuiltIn: true);
- static const IMPLEMENTS = const Keyword("implements", isBuiltIn: true);
- static const IMPORT = const Keyword("import", isBuiltIn: true);
- static const LIBRARY = const Keyword("library", isBuiltIn: true);
- static const OPERATOR = const Keyword("operator", isBuiltIn: true);
- static const PART = const Keyword("part", isBuiltIn: true);
- static const SET = const Keyword("set", isBuiltIn: true);
- static const STATIC = const Keyword("static", isBuiltIn: true);
- static const TYPEDEF = const Keyword("typedef", isBuiltIn: true);
-
- static const ASYNC = const Keyword("async", isPseudo: true);
- static const AWAIT = const Keyword("await", isPseudo: true);
- static const DEFERRED = const Keyword("deferred", isBuiltIn: true);
- static const FUNCTION = const Keyword("Function", isPseudo: true);
- static const HIDE = const Keyword("hide", isPseudo: true);
- static const NATIVE = const Keyword("native", isPseudo: true);
- static const OF = const Keyword("of", isPseudo: true);
- static const ON = const Keyword("on", isPseudo: true);
- static const PATCH = const Keyword("patch", isPseudo: true);
- static const SHOW = const Keyword("show", isPseudo: true);
- static const SOURCE = const Keyword("source", isPseudo: true);
- static const SYNC = const Keyword("sync", isPseudo: true);
- static const YIELD = const Keyword("yield", isPseudo: true);
-
- static const List<Keyword> values = const <Keyword>[
- ASSERT,
- BREAK,
- CASE,
- CATCH,
- CLASS,
- CONST,
- CONTINUE,
- DEFAULT,
- DO,
- ELSE,
- ENUM,
- EXTENDS,
- FALSE,
- FINAL,
- FINALLY,
- FOR,
- IF,
- IN,
- NEW,
- NULL,
- RETHROW,
- RETURN,
- SUPER,
- SWITCH,
- THIS,
- THROW,
- TRUE,
- TRY,
- VAR,
- VOID,
- WHILE,
- WITH,
- // ====
- IS,
- // ==== Built In
- ABSTRACT,
- AS,
- COVARIANT,
- DEFERRED,
- DYNAMIC,
- EXPORT,
- EXTERNAL,
- FACTORY,
- GET,
- IMPLEMENTS,
- IMPORT,
- LIBRARY,
- OPERATOR,
- PART,
- SET,
- STATIC,
- TYPEDEF,
- // ==== Pseudo
- ASYNC,
- AWAIT,
- FUNCTION,
- HIDE,
- NATIVE,
- OF,
- ON,
- PATCH,
- SHOW,
- SOURCE,
- SYNC,
- YIELD,
- ];
-
- static Map<String, Keyword> _keywords;
- static Map<String, Keyword> get keywords {
- if (_keywords == null) {
- _keywords = computeKeywordMap();
- }
- return _keywords;
- }
-
- const Keyword(String syntax,
- {bool isPseudo: false,
- bool isBuiltIn: false,
- PrecedenceInfo info: KEYWORD_INFO})
- : super(syntax, info: info, isBuiltIn: isBuiltIn, isPseudo: isPseudo);
-
- static Map<String, Keyword> computeKeywordMap() {
- Map<String, Keyword> result = new Map<String, Keyword>();
- for (Keyword keyword in values) {
- result[keyword.syntax] = keyword;
- }
- return result;
- }
-}
-
-/**
- * Abstract state in a state machine for scanning keywords.
- */
-abstract class KeywordState {
- KeywordState next(int c);
- KeywordState nextCapital(int c);
-
- Keyword get keyword;
-
- static KeywordState _KEYWORD_STATE;
- static KeywordState get KEYWORD_STATE {
- if (_KEYWORD_STATE == null) {
- List<String> strings = new List<String>(Keyword.values.length);
- for (int i = 0; i < Keyword.values.length; i++) {
- strings[i] = Keyword.values[i].syntax;
- }
- strings.sort((a, b) => a.compareTo(b));
- _KEYWORD_STATE = computeKeywordStateTable(0, strings, 0, strings.length);
- }
- return _KEYWORD_STATE;
- }
-
- static KeywordState computeKeywordStateTable(
- int start, List<String> strings, int offset, int length) {
- bool isLowercase = true;
-
- List<KeywordState> table = new List<KeywordState>($z - $A + 1);
- assert(length != 0);
- int chunk = 0;
- int chunkStart = -1;
- bool isLeaf = false;
- for (int i = offset; i < offset + length; i++) {
- if (strings[i].length == start) {
- isLeaf = true;
- }
- if (strings[i].length > start) {
- int c = strings[i].codeUnitAt(start);
- if ($A <= c && c <= $Z) {
- isLowercase = false;
- }
- if (chunk != c) {
- if (chunkStart != -1) {
- assert(table[chunk - $A] == null);
- table[chunk - $A] = computeKeywordStateTable(
- start + 1, strings, chunkStart, i - chunkStart);
- }
- chunkStart = i;
- chunk = c;
- }
- }
- }
- if (chunkStart != -1) {
- assert(table[chunk - $A] == null);
- table[chunk - $A] = computeKeywordStateTable(
- start + 1, strings, chunkStart, offset + length - chunkStart);
- } else {
- assert(length == 1);
- return new LeafKeywordState(strings[offset]);
- }
- String syntax = isLeaf ? strings[offset] : null;
- if (isLowercase) {
- table = table.sublist($a - $A);
- return new LowerCaseArrayKeywordState(table, syntax);
- } else {
- return new UpperCaseArrayKeywordState(table, syntax);
- }
- }
-}
-
-/**
- * A state with multiple outgoing transitions.
- */
-abstract class ArrayKeywordState implements KeywordState {
- final List<KeywordState> table;
- final Keyword keyword;
-
- ArrayKeywordState(this.table, String syntax)
- : keyword = ((syntax == null) ? null : Keyword.keywords[syntax]);
-
- KeywordState next(int c);
-
- KeywordState nextCapital(int c);
-
- String toString() {
- StringBuffer sb = new StringBuffer();
- sb.write("[");
- if (keyword != null) {
- sb.write("*");
- sb.write(keyword);
- sb.write(" ");
- }
- List<KeywordState> foo = table;
- for (int i = 0; i < foo.length; i++) {
- if (foo[i] != null) {
- sb.write("${new String.fromCharCodes([i + $a])}: "
- "${foo[i]}; ");
- }
- }
- sb.write("]");
- return sb.toString();
- }
-}
-
-class LowerCaseArrayKeywordState extends ArrayKeywordState {
- LowerCaseArrayKeywordState(List<KeywordState> table, String syntax)
- : super(table, syntax) {
- assert(table.length == $z - $a + 1);
- }
-
- KeywordState next(int c) => table[c - $a];
-
- KeywordState nextCapital(int c) => null;
-}
-
-class UpperCaseArrayKeywordState extends ArrayKeywordState {
- UpperCaseArrayKeywordState(List<KeywordState> table, String syntax)
- : super(table, syntax) {
- assert(table.length == $z - $A + 1);
- }
-
- KeywordState next(int c) => table[c - $A];
-
- KeywordState nextCapital(int c) => table[c - $A];
-}
-
-/**
- * A state that has no outgoing transitions.
- */
-class LeafKeywordState implements KeywordState {
- final Keyword keyword;
-
- LeafKeywordState(String syntax) : keyword = Keyword.keywords[syntax];
-
- KeywordState next(int c) => null;
- KeywordState nextCapital(int c) => null;
-
- String toString() => keyword.syntax;
-}
« no previous file with comments | « pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart ('k') | pkg/front_end/lib/src/fasta/scanner/keyword_state.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698