Bläddra i källkod

New Karma setup

Use ChromeHeadless to run unit test

Create new classes for function, Infix and unary applications

New Types enum

Expression parsing now returns a Literal object if no Application
Lucas de Souza 5 år sedan
förälder
incheckning
41c31539c3

+ 6 - 1
.vscode/settings.json

@@ -1,3 +1,8 @@
 {
-  "editor.tabSize": 2
+  "editor.tabSize": 2,
+  "files.watcherExclude": {
+    "**/.git/objects/**": true,
+    "**/.git/subtree-cache/**": true,
+    "**/node_modules/**": true
+  }
 }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 159 - 0
grammar/pt-br/.antlr/ivprog.interp


+ 286 - 0
grammar/pt-br/.antlr/ivprog.java

@@ -0,0 +1,286 @@
+// Generated from /home/lucas/ivprog/grammar/pt-br/ivprog.g4 by ANTLR 4.7.1
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class ivprog extends Lexer {
+	static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		RK_PROGRAM=1, RK_REAL=2, RK_VOID=3, RK_BOOLEAN=4, RK_STRING=5, RK_INTEGER=6, 
+		RK_CHARACTER=7, RK_SWITCH=8, RK_CASE=9, RK_DEFAULT=10, RK_CONST=11, RK_FUNCTION=12, 
+		RK_RETURN=13, RK_FOR=14, RK_BREAK=15, RK_DO=16, RK_WHILE=17, RK_IF=18, 
+		RK_ELSE=19, RK_FALSE=20, RK_TRUE=21, OPEN_PARENTHESIS=22, CLOSE_PARENTHESIS=23, 
+		OPEN_BRACE=24, CLOSE_BRACE=25, OPEN_CURLY=26, CLOSE_CURLY=27, COMMA=28, 
+		EQUAL=29, SUM_OP=30, MULTI_OP=31, AND_OPERATOR=32, OR_OPERATOR=33, RELATIONAL_OPERATOR=34, 
+		COLON=35, NOT_OPERATOR=36, ID=37, INTEGER=38, REAL=39, STRING=40, CHARACTER=41, 
+		WHITESPACE=42, EOS=43, COMMENTS=44;
+	public static String[] channelNames = {
+		"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+	};
+
+	public static String[] modeNames = {
+		"DEFAULT_MODE"
+	};
+
+	public static final String[] ruleNames = {
+		"RK_PROGRAM", "RK_REAL", "RK_VOID", "RK_BOOLEAN", "RK_STRING", "RK_INTEGER", 
+		"RK_CHARACTER", "RK_SWITCH", "RK_CASE", "RK_DEFAULT", "RK_CONST", "RK_FUNCTION", 
+		"RK_RETURN", "RK_FOR", "RK_BREAK", "RK_DO", "RK_WHILE", "RK_IF", "RK_ELSE", 
+		"RK_FALSE", "RK_TRUE", "RK_LOGICAL_NOT", "RK_LOGICAL_AND", "RK_LOGICAL_OR", 
+		"OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", "OPEN_BRACE", "CLOSE_BRACE", 
+		"OPEN_CURLY", "CLOSE_CURLY", "COMMA", "EQUAL", "SUM_OP", "MULTI_OP", "AND_OPERATOR", 
+		"OR_OPERATOR", "RELATIONAL_OPERATOR", "COLON", "NOT_OPERATOR", "ID", "INTEGER", 
+		"REAL", "STRING", "STRING_CHARACTER", "CHARACTER", "WHITESPACE", "SEMICOLON", 
+		"EOS", "HEX_DIGIT", "OCTAL_DIGIT", "ESC_SEQ", "ESC_OCTAL", "ESC_UNICODE", 
+		"COMMENTS"
+	};
+
+	private static final String[] _LITERAL_NAMES = {
+		null, "'programa'", "'real'", "'vazio'", "'logico'", "'cadeia'", "'inteiro'", 
+		"'caractere'", "'escolha'", "'caso'", "'contrario'", "'const'", "'funcao'", 
+		"'retorne'", "'para'", "'pare'", "'faca'", "'enquanto'", "'se'", "'senao'", 
+		"'falso'", "'verdadeiro'", "'('", "')'", "'['", "']'", "'{'", "'}'", "','", 
+		"'='", null, null, null, null, null, "':'"
+	};
+	private static final String[] _SYMBOLIC_NAMES = {
+		null, "RK_PROGRAM", "RK_REAL", "RK_VOID", "RK_BOOLEAN", "RK_STRING", "RK_INTEGER", 
+		"RK_CHARACTER", "RK_SWITCH", "RK_CASE", "RK_DEFAULT", "RK_CONST", "RK_FUNCTION", 
+		"RK_RETURN", "RK_FOR", "RK_BREAK", "RK_DO", "RK_WHILE", "RK_IF", "RK_ELSE", 
+		"RK_FALSE", "RK_TRUE", "OPEN_PARENTHESIS", "CLOSE_PARENTHESIS", "OPEN_BRACE", 
+		"CLOSE_BRACE", "OPEN_CURLY", "CLOSE_CURLY", "COMMA", "EQUAL", "SUM_OP", 
+		"MULTI_OP", "AND_OPERATOR", "OR_OPERATOR", "RELATIONAL_OPERATOR", "COLON", 
+		"NOT_OPERATOR", "ID", "INTEGER", "REAL", "STRING", "CHARACTER", "WHITESPACE", 
+		"EOS", "COMMENTS"
+	};
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+
+	  //Translate to fit your language
+	  ivprog.MAIN_FUNCTION_NAME = "inicio";
+
+
+	public ivprog(CharStream input) {
+		super(input);
+		_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	@Override
+	public String getGrammarFileName() { return "ivprog.g4"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public String[] getChannelNames() { return channelNames; }
+
+	@Override
+	public String[] getModeNames() { return modeNames; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public static final String _serializedATN =
+		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2.\u01ba\b\1\4\2\t"+
+		"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
+		"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
+		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
+		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
+		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
+		",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
+		"\64\4\65\t\65\4\66\t\66\4\67\t\67\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2"+
+		"\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3"+
+		"\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3"+
+		"\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3"+
+		"\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16"+
+		"\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\21"+
+		"\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23"+
+		"\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25"+
+		"\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27"+
+		"\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35"+
+		"\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3&\3"+
+		"&\3&\3&\3&\5&\u012a\n&\3\'\3\'\3(\3(\3)\3)\7)\u0132\n)\f)\16)\u0135\13"+
+		")\3*\6*\u0138\n*\r*\16*\u0139\3*\3*\3*\3*\5*\u0140\n*\3*\6*\u0143\n*\r"+
+		"*\16*\u0144\3*\3*\3*\3*\5*\u014b\n*\3*\6*\u014e\n*\r*\16*\u014f\5*\u0152"+
+		"\n*\3+\6+\u0155\n+\r+\16+\u0156\3+\3+\6+\u015b\n+\r+\16+\u015c\3,\3,\7"+
+		",\u0161\n,\f,\16,\u0164\13,\3,\3,\3-\3-\5-\u016a\n-\3.\3.\3.\5.\u016f"+
+		"\n.\3.\3.\3/\3/\3/\3/\3\60\3\60\3\61\6\61\u017a\n\61\r\61\16\61\u017b"+
+		"\3\61\5\61\u017f\n\61\3\62\3\62\3\63\3\63\3\64\3\64\3\64\3\64\5\64\u0189"+
+		"\n\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\5\65\u0196"+
+		"\n\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\7\67\u01a3"+
+		"\n\67\f\67\16\67\u01a6\13\67\3\67\5\67\u01a9\n\67\3\67\3\67\3\67\3\67"+
+		"\3\67\7\67\u01b0\n\67\f\67\16\67\u01b3\13\67\3\67\3\67\5\67\u01b7\n\67"+
+		"\3\67\3\67\3\u01b1\28\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27"+
+		"\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\2/\2\61\2\63\30\65"+
+		"\31\67\329\33;\34=\35?\36A\37C E!G\"I#K$M%O&Q\'S(U)W*Y\2[+],_\2a-c\2e"+
+		"\2g\2i\2k\2m.\3\2\21\4\2--//\5\2\'\',,\61\61\4\2>>@@\5\2C\\aac|\6\2\62"+
+		";C\\aac|\3\2\62;\3\2\62\63\6\2\f\f\17\17$$^^\6\2\f\f\17\17))^^\4\2\13"+
+		"\13\"\"\4\2\f\f\17\17\5\2\62;CHch\3\2\629\n\2$$))^^ddhhppttvv\3\2\62\65"+
+		"\2\u01c9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2"+
+		"\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27"+
+		"\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2"+
+		"\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2\63\3\2\2"+
+		"\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2"+
+		"\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2"+
+		"M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2[\3"+
+		"\2\2\2\2]\3\2\2\2\2a\3\2\2\2\2m\3\2\2\2\3o\3\2\2\2\5x\3\2\2\2\7}\3\2\2"+
+		"\2\t\u0083\3\2\2\2\13\u008a\3\2\2\2\r\u0091\3\2\2\2\17\u0099\3\2\2\2\21"+
+		"\u00a3\3\2\2\2\23\u00ab\3\2\2\2\25\u00b0\3\2\2\2\27\u00ba\3\2\2\2\31\u00c0"+
+		"\3\2\2\2\33\u00c7\3\2\2\2\35\u00cf\3\2\2\2\37\u00d4\3\2\2\2!\u00d9\3\2"+
+		"\2\2#\u00de\3\2\2\2%\u00e7\3\2\2\2\'\u00ea\3\2\2\2)\u00f0\3\2\2\2+\u00f6"+
+		"\3\2\2\2-\u0101\3\2\2\2/\u0105\3\2\2\2\61\u0107\3\2\2\2\63\u010a\3\2\2"+
+		"\2\65\u010c\3\2\2\2\67\u010e\3\2\2\29\u0110\3\2\2\2;\u0112\3\2\2\2=\u0114"+
+		"\3\2\2\2?\u0116\3\2\2\2A\u0118\3\2\2\2C\u011a\3\2\2\2E\u011c\3\2\2\2G"+
+		"\u011e\3\2\2\2I\u0120\3\2\2\2K\u0129\3\2\2\2M\u012b\3\2\2\2O\u012d\3\2"+
+		"\2\2Q\u012f\3\2\2\2S\u0151\3\2\2\2U\u0154\3\2\2\2W\u015e\3\2\2\2Y\u0169"+
+		"\3\2\2\2[\u016b\3\2\2\2]\u0172\3\2\2\2_\u0176\3\2\2\2a\u017e\3\2\2\2c"+
+		"\u0180\3\2\2\2e\u0182\3\2\2\2g\u0188\3\2\2\2i\u0195\3\2\2\2k\u0197\3\2"+
+		"\2\2m\u01b6\3\2\2\2op\7r\2\2pq\7t\2\2qr\7q\2\2rs\7i\2\2st\7t\2\2tu\7c"+
+		"\2\2uv\7o\2\2vw\7c\2\2w\4\3\2\2\2xy\7t\2\2yz\7g\2\2z{\7c\2\2{|\7n\2\2"+
+		"|\6\3\2\2\2}~\7x\2\2~\177\7c\2\2\177\u0080\7|\2\2\u0080\u0081\7k\2\2\u0081"+
+		"\u0082\7q\2\2\u0082\b\3\2\2\2\u0083\u0084\7n\2\2\u0084\u0085\7q\2\2\u0085"+
+		"\u0086\7i\2\2\u0086\u0087\7k\2\2\u0087\u0088\7e\2\2\u0088\u0089\7q\2\2"+
+		"\u0089\n\3\2\2\2\u008a\u008b\7e\2\2\u008b\u008c\7c\2\2\u008c\u008d\7f"+
+		"\2\2\u008d\u008e\7g\2\2\u008e\u008f\7k\2\2\u008f\u0090\7c\2\2\u0090\f"+
+		"\3\2\2\2\u0091\u0092\7k\2\2\u0092\u0093\7p\2\2\u0093\u0094\7v\2\2\u0094"+
+		"\u0095\7g\2\2\u0095\u0096\7k\2\2\u0096\u0097\7t\2\2\u0097\u0098\7q\2\2"+
+		"\u0098\16\3\2\2\2\u0099\u009a\7e\2\2\u009a\u009b\7c\2\2\u009b\u009c\7"+
+		"t\2\2\u009c\u009d\7c\2\2\u009d\u009e\7e\2\2\u009e\u009f\7v\2\2\u009f\u00a0"+
+		"\7g\2\2\u00a0\u00a1\7t\2\2\u00a1\u00a2\7g\2\2\u00a2\20\3\2\2\2\u00a3\u00a4"+
+		"\7g\2\2\u00a4\u00a5\7u\2\2\u00a5\u00a6\7e\2\2\u00a6\u00a7\7q\2\2\u00a7"+
+		"\u00a8\7n\2\2\u00a8\u00a9\7j\2\2\u00a9\u00aa\7c\2\2\u00aa\22\3\2\2\2\u00ab"+
+		"\u00ac\7e\2\2\u00ac\u00ad\7c\2\2\u00ad\u00ae\7u\2\2\u00ae\u00af\7q\2\2"+
+		"\u00af\24\3\2\2\2\u00b0\u00b1\7e\2\2\u00b1\u00b2\7q\2\2\u00b2\u00b3\7"+
+		"p\2\2\u00b3\u00b4\7v\2\2\u00b4\u00b5\7t\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7"+
+		"\7t\2\2\u00b7\u00b8\7k\2\2\u00b8\u00b9\7q\2\2\u00b9\26\3\2\2\2\u00ba\u00bb"+
+		"\7e\2\2\u00bb\u00bc\7q\2\2\u00bc\u00bd\7p\2\2\u00bd\u00be\7u\2\2\u00be"+
+		"\u00bf\7v\2\2\u00bf\30\3\2\2\2\u00c0\u00c1\7h\2\2\u00c1\u00c2\7w\2\2\u00c2"+
+		"\u00c3\7p\2\2\u00c3\u00c4\7e\2\2\u00c4\u00c5\7c\2\2\u00c5\u00c6\7q\2\2"+
+		"\u00c6\32\3\2\2\2\u00c7\u00c8\7t\2\2\u00c8\u00c9\7g\2\2\u00c9\u00ca\7"+
+		"v\2\2\u00ca\u00cb\7q\2\2\u00cb\u00cc\7t\2\2\u00cc\u00cd\7p\2\2\u00cd\u00ce"+
+		"\7g\2\2\u00ce\34\3\2\2\2\u00cf\u00d0\7r\2\2\u00d0\u00d1\7c\2\2\u00d1\u00d2"+
+		"\7t\2\2\u00d2\u00d3\7c\2\2\u00d3\36\3\2\2\2\u00d4\u00d5\7r\2\2\u00d5\u00d6"+
+		"\7c\2\2\u00d6\u00d7\7t\2\2\u00d7\u00d8\7g\2\2\u00d8 \3\2\2\2\u00d9\u00da"+
+		"\7h\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7e\2\2\u00dc\u00dd\7c\2\2\u00dd"+
+		"\"\3\2\2\2\u00de\u00df\7g\2\2\u00df\u00e0\7p\2\2\u00e0\u00e1\7s\2\2\u00e1"+
+		"\u00e2\7w\2\2\u00e2\u00e3\7c\2\2\u00e3\u00e4\7p\2\2\u00e4\u00e5\7v\2\2"+
+		"\u00e5\u00e6\7q\2\2\u00e6$\3\2\2\2\u00e7\u00e8\7u\2\2\u00e8\u00e9\7g\2"+
+		"\2\u00e9&\3\2\2\2\u00ea\u00eb\7u\2\2\u00eb\u00ec\7g\2\2\u00ec\u00ed\7"+
+		"p\2\2\u00ed\u00ee\7c\2\2\u00ee\u00ef\7q\2\2\u00ef(\3\2\2\2\u00f0\u00f1"+
+		"\7h\2\2\u00f1\u00f2\7c\2\2\u00f2\u00f3\7n\2\2\u00f3\u00f4\7u\2\2\u00f4"+
+		"\u00f5\7q\2\2\u00f5*\3\2\2\2\u00f6\u00f7\7x\2\2\u00f7\u00f8\7g\2\2\u00f8"+
+		"\u00f9\7t\2\2\u00f9\u00fa\7f\2\2\u00fa\u00fb\7c\2\2\u00fb\u00fc\7f\2\2"+
+		"\u00fc\u00fd\7g\2\2\u00fd\u00fe\7k\2\2\u00fe\u00ff\7t\2\2\u00ff\u0100"+
+		"\7q\2\2\u0100,\3\2\2\2\u0101\u0102\7p\2\2\u0102\u0103\7c\2\2\u0103\u0104"+
+		"\7q\2\2\u0104.\3\2\2\2\u0105\u0106\7G\2\2\u0106\60\3\2\2\2\u0107\u0108"+
+		"\7Q\2\2\u0108\u0109\7W\2\2\u0109\62\3\2\2\2\u010a\u010b\7*\2\2\u010b\64"+
+		"\3\2\2\2\u010c\u010d\7+\2\2\u010d\66\3\2\2\2\u010e\u010f\7]\2\2\u010f"+
+		"8\3\2\2\2\u0110\u0111\7_\2\2\u0111:\3\2\2\2\u0112\u0113\7}\2\2\u0113<"+
+		"\3\2\2\2\u0114\u0115\7\177\2\2\u0115>\3\2\2\2\u0116\u0117\7.\2\2\u0117"+
+		"@\3\2\2\2\u0118\u0119\7?\2\2\u0119B\3\2\2\2\u011a\u011b\t\2\2\2\u011b"+
+		"D\3\2\2\2\u011c\u011d\t\3\2\2\u011dF\3\2\2\2\u011e\u011f\5/\30\2\u011f"+
+		"H\3\2\2\2\u0120\u0121\5\61\31\2\u0121J\3\2\2\2\u0122\u0123\7@\2\2\u0123"+
+		"\u012a\7?\2\2\u0124\u0125\7?\2\2\u0125\u012a\7?\2\2\u0126\u0127\7>\2\2"+
+		"\u0127\u012a\7?\2\2\u0128\u012a\t\4\2\2\u0129\u0122\3\2\2\2\u0129\u0124"+
+		"\3\2\2\2\u0129\u0126\3\2\2\2\u0129\u0128\3\2\2\2\u012aL\3\2\2\2\u012b"+
+		"\u012c\7<\2\2\u012cN\3\2\2\2\u012d\u012e\5-\27\2\u012eP\3\2\2\2\u012f"+
+		"\u0133\t\5\2\2\u0130\u0132\t\6\2\2\u0131\u0130\3\2\2\2\u0132\u0135\3\2"+
+		"\2\2\u0133\u0131\3\2\2\2\u0133\u0134\3\2\2\2\u0134R\3\2\2\2\u0135\u0133"+
+		"\3\2\2\2\u0136\u0138\t\7\2\2\u0137\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139"+
+		"\u0137\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u0152\3\2\2\2\u013b\u013c\7\62"+
+		"\2\2\u013c\u0140\7z\2\2\u013d\u013e\7\62\2\2\u013e\u0140\7Z\2\2\u013f"+
+		"\u013b\3\2\2\2\u013f\u013d\3\2\2\2\u0140\u0142\3\2\2\2\u0141\u0143\5c"+
+		"\62\2\u0142\u0141\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0142\3\2\2\2\u0144"+
+		"\u0145\3\2\2\2\u0145\u0152\3\2\2\2\u0146\u0147\7\62\2\2\u0147\u014b\7"+
+		"d\2\2\u0148\u0149\7\62\2\2\u0149\u014b\7D\2\2\u014a\u0146\3\2\2\2\u014a"+
+		"\u0148\3\2\2\2\u014b\u014d\3\2\2\2\u014c\u014e\t\b\2\2\u014d\u014c\3\2"+
+		"\2\2\u014e\u014f\3\2\2\2\u014f\u014d\3\2\2\2\u014f\u0150\3\2\2\2\u0150"+
+		"\u0152\3\2\2\2\u0151\u0137\3\2\2\2\u0151\u013f\3\2\2\2\u0151\u014a\3\2"+
+		"\2\2\u0152T\3\2\2\2\u0153\u0155\t\7\2\2\u0154\u0153\3\2\2\2\u0155\u0156"+
+		"\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2\u0158"+
+		"\u015a\7\60\2\2\u0159\u015b\t\7\2\2\u015a\u0159\3\2\2\2\u015b\u015c\3"+
+		"\2\2\2\u015c\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015dV\3\2\2\2\u015e\u0162"+
+		"\7$\2\2\u015f\u0161\5Y-\2\u0160\u015f\3\2\2\2\u0161\u0164\3\2\2\2\u0162"+
+		"\u0160\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u0165\3\2\2\2\u0164\u0162\3\2"+
+		"\2\2\u0165\u0166\7$\2\2\u0166X\3\2\2\2\u0167\u016a\n\t\2\2\u0168\u016a"+
+		"\5g\64\2\u0169\u0167\3\2\2\2\u0169\u0168\3\2\2\2\u016aZ\3\2\2\2\u016b"+
+		"\u016e\7)\2\2\u016c\u016f\5g\64\2\u016d\u016f\n\n\2\2\u016e\u016c\3\2"+
+		"\2\2\u016e\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171\7)\2\2\u0171"+
+		"\\\3\2\2\2\u0172\u0173\t\13\2\2\u0173\u0174\3\2\2\2\u0174\u0175\b/\2\2"+
+		"\u0175^\3\2\2\2\u0176\u0177\7=\2\2\u0177`\3\2\2\2\u0178\u017a\t\f\2\2"+
+		"\u0179\u0178\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u0179\3\2\2\2\u017b\u017c"+
+		"\3\2\2\2\u017c\u017f\3\2\2\2\u017d\u017f\5_\60\2\u017e\u0179\3\2\2\2\u017e"+
+		"\u017d\3\2\2\2\u017fb\3\2\2\2\u0180\u0181\t\r\2\2\u0181d\3\2\2\2\u0182"+
+		"\u0183\t\16\2\2\u0183f\3\2\2\2\u0184\u0185\7^\2\2\u0185\u0189\t\17\2\2"+
+		"\u0186\u0189\5k\66\2\u0187\u0189\5i\65\2\u0188\u0184\3\2\2\2\u0188\u0186"+
+		"\3\2\2\2\u0188\u0187\3\2\2\2\u0189h\3\2\2\2\u018a\u018b\7^\2\2\u018b\u018c"+
+		"\t\20\2\2\u018c\u018d\5e\63\2\u018d\u018e\5e\63\2\u018e\u0196\3\2\2\2"+
+		"\u018f\u0190\7^\2\2\u0190\u0191\5e\63\2\u0191\u0192\5e\63\2\u0192\u0196"+
+		"\3\2\2\2\u0193\u0194\7^\2\2\u0194\u0196\5e\63\2\u0195\u018a\3\2\2\2\u0195"+
+		"\u018f\3\2\2\2\u0195\u0193\3\2\2\2\u0196j\3\2\2\2\u0197\u0198\7^\2\2\u0198"+
+		"\u0199\7w\2\2\u0199\u019a\5c\62\2\u019a\u019b\5c\62\2\u019b\u019c\5c\62"+
+		"\2\u019c\u019d\5c\62\2\u019dl\3\2\2\2\u019e\u019f\7\61\2\2\u019f\u01a0"+
+		"\7\61\2\2\u01a0\u01a4\3\2\2\2\u01a1\u01a3\n\f\2\2\u01a2\u01a1\3\2\2\2"+
+		"\u01a3\u01a6\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u01a8"+
+		"\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a7\u01a9\7\17\2\2\u01a8\u01a7\3\2\2\2"+
+		"\u01a8\u01a9\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01b7\7\f\2\2\u01ab\u01ac"+
+		"\7\61\2\2\u01ac\u01ad\7,\2\2\u01ad\u01b1\3\2\2\2\u01ae\u01b0\13\2\2\2"+
+		"\u01af\u01ae\3\2\2\2\u01b0\u01b3\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b1\u01af"+
+		"\3\2\2\2\u01b2\u01b4\3\2\2\2\u01b3\u01b1\3\2\2\2\u01b4\u01b5\7,\2\2\u01b5"+
+		"\u01b7\7\61\2\2\u01b6\u019e\3\2\2\2\u01b6\u01ab\3\2\2\2\u01b7\u01b8\3"+
+		"\2\2\2\u01b8\u01b9\b\67\3\2\u01b9n\3\2\2\2\30\2\u0129\u0133\u0139\u013f"+
+		"\u0144\u014a\u014f\u0151\u0156\u015c\u0162\u0169\u016e\u017b\u017e\u0188"+
+		"\u0195\u01a4\u01a8\u01b1\u01b6\4\b\2\2\2\3\2";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}

+ 74 - 0
grammar/pt-br/.antlr/ivprog.tokens

@@ -0,0 +1,74 @@
+RK_PROGRAM=1
+RK_REAL=2
+RK_VOID=3
+RK_BOOLEAN=4
+RK_STRING=5
+RK_INTEGER=6
+RK_CHARACTER=7
+RK_SWITCH=8
+RK_CASE=9
+RK_DEFAULT=10
+RK_CONST=11
+RK_FUNCTION=12
+RK_RETURN=13
+RK_FOR=14
+RK_BREAK=15
+RK_DO=16
+RK_WHILE=17
+RK_IF=18
+RK_ELSE=19
+RK_FALSE=20
+RK_TRUE=21
+OPEN_PARENTHESIS=22
+CLOSE_PARENTHESIS=23
+OPEN_BRACE=24
+CLOSE_BRACE=25
+OPEN_CURLY=26
+CLOSE_CURLY=27
+COMMA=28
+EQUAL=29
+SUM_OP=30
+MULTI_OP=31
+AND_OPERATOR=32
+OR_OPERATOR=33
+RELATIONAL_OPERATOR=34
+COLON=35
+NOT_OPERATOR=36
+ID=37
+INTEGER=38
+REAL=39
+STRING=40
+CHARACTER=41
+WHITESPACE=42
+EOS=43
+COMMENTS=44
+'programa'=1
+'real'=2
+'vazio'=3
+'logico'=4
+'cadeia'=5
+'inteiro'=6
+'caractere'=7
+'escolha'=8
+'caso'=9
+'contrario'=10
+'const'=11
+'funcao'=12
+'retorne'=13
+'para'=14
+'pare'=15
+'faca'=16
+'enquanto'=17
+'se'=18
+'senao'=19
+'falso'=20
+'verdadeiro'=21
+'('=22
+')'=23
+'['=24
+']'=25
+'{'=26
+'}'=27
+','=28
+'='=29
+':'=35

+ 6 - 0
grammar/pt-br/ivprog.g4

@@ -1,5 +1,11 @@
 lexer grammar ivprog;
 // BEGIN i18n Lexical rules
+
+@lexer::members{
+  //Translate to fit your language
+  ivprog.MAIN_FUNCTION_NAME = "inicio";
+}
+
 RK_PROGRAM
   : 'programa'
   ;

+ 1 - 1
js/ast/commands/attribution.js

@@ -1,4 +1,4 @@
-export class Attribution {
+export class Assign {
   
   constructor (id, expression) {
     this.id = id;

+ 21 - 0
js/ast/commands/function.js

@@ -0,0 +1,21 @@
+export class Function {
+
+  constructor(name, returnType, formalParameters, commandBlock) {
+    this.name = name;
+    this.returnType = returnType;
+    this.formalParameters = formalParameters;
+    this.commandBlock = commandBlock;
+  }
+
+  get isMain () {
+    return this.name === null && this.returnType === 'void';
+  }
+
+  get commands () {
+    return this.commandBlock.commands;
+  }
+
+  get variablesDeclarations () {
+    return this.commandBlock.variables;
+  }
+}

+ 3 - 2
js/ast/commands/index.js

@@ -1,11 +1,12 @@
 import { Break } from './break';
 import { Return } from './return';
-import { Attribution } from './attribution';
+import { Assign } from './assign';
 import { Declaration } from './declaration';
 import { ArrayDeclaration } from './arrayDeclaration';
 import { While } from './while';
 import { For } from './for';
+import { Function } from './function';
 
 export {
-  Break, Return, Attribution, Declaration, ArrayDeclaration, While, For
+  Break, Return, Assign, Declaration, ArrayDeclaration, While, For, Function
 };

+ 2 - 1
js/ast/expressions/boolLiteral.js

@@ -1,8 +1,9 @@
 import { Literal } from './literal';
+import {Types} from './../types';
 export class BoolLiteral extends Literal {
   
   constructor(value) {
-    super('bool');
+    super(Types.BOOLEAN);
     this.value = value;
   }
 }

+ 5 - 1
js/ast/expressions/index.js

@@ -6,6 +6,8 @@ import { BoolLiteral } from './boolLiteral';
 import { StringLiteral } from './stringLiteral';
 import { ArrayLiteral } from './arrayLiteral';
 import { VariableLiteral } from './variableLiteral';
+import { InfixApp } from './infixApp';
+import { UnaryApp } from './unaryApp';
 
 export {
 	ArrayAccess,
@@ -15,5 +17,7 @@ export {
   BoolLiteral,
   StringLiteral,
   ArrayLiteral,
-  VariableLiteral
+  VariableLiteral,
+  InfixApp,
+  UnaryApp
 };

+ 8 - 0
js/ast/expressions/infixApp.js

@@ -0,0 +1,8 @@
+export class InfixApp {
+
+  constructor(op, left, right) {
+    this.op = op;
+    this.left = left;
+    this.right = right;
+  }
+}

+ 2 - 1
js/ast/expressions/intLiteral.js

@@ -1,8 +1,9 @@
 import { Literal } from './literal';
+import {Types} from './../types';
 export class IntLiteral extends Literal {
   
   constructor(value) {
-    super('int');
+    super(Types.INTEGER);
     this.value = value;
   }
 }

+ 2 - 1
js/ast/expressions/realLiteral.js

@@ -1,8 +1,9 @@
 import { Literal } from './literal';
+import {Types} from './../types';
 export class RealLiteral extends Literal {
   
   constructor(value) {
-    super('real');
+    super(Types.REAL);
     this.value = value;
   }
 }

+ 2 - 1
js/ast/expressions/stringLiteral.js

@@ -1,8 +1,9 @@
 import { Literal } from './literal';
+import {Types} from './../types';
 export class StringLiteral extends Literal {
   
   constructor(value) {
-    super('string');
+    super(Types.STRING);
     this.value = value;
   }
 }

+ 8 - 0
js/ast/expressions/unaryApp.js

@@ -0,0 +1,8 @@
+import {InfixApp} from './infixApp';
+
+export class UnaryApp extends InfixApp {
+  
+  constructor (op, left) {
+    super(op, left, null);
+  }
+}

+ 53 - 55
js/ast/ivprogParser.js

@@ -1,10 +1,12 @@
 import { CommonTokenStream, InputStream } from 'antlr4/index';
 import * as Expressions from './expressions/';
 import * as Commands from './commands/';
+import { Types } from './types';
 import { SyntaxError } from './SyntaxError';
 
 export class IVProgParser {
 
+  // <BEGIN scope consts>
   static get BASE () {
     return 0;
   }
@@ -17,6 +19,7 @@ export class IVProgParser {
   static get LOOP () {
     return 4;
   }
+  // </ END scope consts>
 
   constructor (input, lexerClass) {
     this.lexerClass = lexerClass;
@@ -360,7 +363,7 @@ export class IVProgParser {
     }
     this.pos++;
     const returnType = this.parseType(true);
-    const functionID = this.parseID();
+    const functionID = this.parseID(IVProgParser.FUNCTION);
     this.checkOpenParenthesis();
     this.pos++;
     this.consumeNewLines();
@@ -409,39 +412,44 @@ export class IVProgParser {
     return list;
   }
 
-  parseID () {
+  parseID (scope = IVProgParser.BASE) {
     const token = this.getToken();
     if(token.type !== this.lexerClass.ID) {
       throw SyntaxError.createError('ID', token);
-    }
+    } 
     this.pos++;
+    if (scope === IVProgParser.FUNCTION) {
+      if (token.text === this.lexerClass.MAIN_FUNCTION_NAME){
+        return null;
+      }
+    }
     return token.text;
   }
 
-  parseType (isFunction = false) {
+  parseType (scope = IVProgParser.BASE) {
     const token = this.getToken();
-    if(token.type === this.lexerClass.ID && isFunction) {
-      return 'void';
-    } else if (token.type === this.lexerClass.RK_VOID && isFunction) {
+    if(token.type === this.lexerClass.ID && scope === IVProgParser.FUNCTION) {
+      return Types.VOID;
+    } else if (token.type === this.lexerClass.RK_VOID && scope === IVProgParser.FUNCTION) {
       this.pos++;
-      return 'void';
+      return Types.VOID;
     } else if (this.isVariableType(token)) {
       this.pos++;
       switch(token.type) {
         case this.lexerClass.RK_INTEGER:
-          return 'int';
+          return Types.INTEGER;
         case this.lexerClass.RK_LOGIC:
-          return 'bool';
+          return Types.BOOLEAN;
         case this.lexerClass.RK_REAL:
-          return 'real';
+          return Types.REAL;
         case this.lexerClass.RK_STRING:
-          return 'string';
+          return Types.STRING;
         default:
           break;
       }
     }
     
-    throw SyntaxError.createError(this.getTypesAsString(isFunction), token);
+    throw SyntaxError.createError(this.getTypesAsString(scope), token);
   }
 
   parseCommandBlock (scope = IVProgParser.FUNCTION) {
@@ -502,12 +510,12 @@ export class IVProgParser {
     this.checkOpenParenthesis();
     this.pos++;
     this.consumeNewLines();
-    const attribution = this.parseForAttribution();
+    const attribution = this.parseForAssign();
     this.consumeNewLines();
     const condition = this.parseExpressionOR();
     this.checkEOS();
     this.pos++;
-    const increment = this.parseForAttribution(true);
+    const increment = this.parseForAssign(true);
     this.checkCloseParenthesis()
     this.pos++;
     this.consumeNewLines();
@@ -555,7 +563,7 @@ export class IVProgParser {
       const exp = this.parseExpressionOR();
       this.checkEOS();
       this.pos++;
-      return (new Commands.Attribution(id, exp));
+      return (new Commands.Assign(id, exp));
     } else if (equalOrParenthesis.type === this.lexerClass.OPEN_PARENTHESIS) {
       const actualParameters = this.parseActualParameters();
       this.checkEOS();
@@ -566,7 +574,7 @@ export class IVProgParser {
     }
   }
 
-  parseForAttribution (isLast = false) {
+  parseForAssign (isLast = false) {
     if(!isLast)
       this.consumeNewLines();
     if(this.checkEOS(true)) {
@@ -581,7 +589,7 @@ export class IVProgParser {
     const exp = this.parseExpressionOR();
     this.checkEOS();
     this.pos++;
-    return new Commands.Attribution(id, exp);
+    return new Commands.Assign(id, exp);
   }
 
   /*
@@ -603,86 +611,76 @@ export class IVProgParser {
   **/
   parseExpressionOR () {
     const exp1 = this.parseExpressionAND();
-    let exp2 = null;
-    let or = null;
     const maybeAnd = this.getToken();
     if (maybeAnd.type === this.lexerClass.OR_OPERATOR) {
       this.pos++;
-      or = 'or';
+      const or = 'or';
       this.consumeNewLines();
-      exp2 = this.parseExpressionOR();
+      const exp2 = this.parseExpressionOR();
+      return new Expressions.InfixApp(or, exp1, exp2);
     }
-
-    return {left: exp1, op:or, right: exp2};
+    return exp1;
   }
 
   parseExpressionAND () {
     const exp1 = this.parseExpressionNot();
-    let and = null;
-    let exp2 = null;
     const andToken = this.getToken();
     if (andToken.type === this.lexerClass.AND_OPERATOR) {
       this.pos++;
-      and = 'and';
+      const and = 'and';
       this.consumeNewLines();
-      exp2 = this.parseExpressionAND();
+      const exp2 = this.parseExpressionAND();
+      return new Expressions.InfixApp(and, exp1, exp2);
     }
-
-    return {left: exp1, op: and, right: exp2};
+    return exp1;
   }
 
   parseExpressionNot () {
-    let not = null;
     const maybeNotToken = this.getToken();
     if (maybeNotToken.type === this.lexerClass.NOT_OPERATOR) {
       this.pos++;
-      not = 'not';
+      const not = 'not';
+      const exp1 = this.parseExpressionRel();
+      return new Expressions.UnaryApp(not, exp1);
+    } else {
+      return this.parseExpressionRel();
     }
-    const eRel = this.parseExpressionRel();
-
-    return {left: null, op: not, right: eRel};
   }
 
   parseExpressionRel () {
     const exp1 = this.parseExpression();
-    let rel = null;
-    let exp2 = null;
     const relToken = this.getToken();
     if(relToken.type === this.lexerClass.RELATIONAL_OPERATOR) {
       this.pos++;
-      rel = relToken.text; // TODO: source code line/column information
-      exp2 = this.parseExpression();
+      const rel = relToken.text; // TODO: source code line/column information
+      const exp2 = this.parseExpression();
+      return new Expressions.InfixApp(rel, exp1, exp2);
     }
-
-    return {left: exp1, op: rel, right: exp2};
+    return exp1;
   }
 
   parseExpression () {
     const factor = this.parseFactor();
-    let op = null;
-    let exp = null;
     const sumOpToken = this.getToken();
     if(sumOpToken.type === this.lexerClass.SUM_OP) {
       this.pos++;
-      op = sumOpToken.text; // TODO: source code line/column information
-      exp = this.parseExpression();
+      const op = sumOpToken.text; // TODO: source code line/column information
+      const exp = this.parseExpression();
+      return new Expressions.InfixApp(op, factor, exp);
     }
-
-    return {left: factor, op: op, right: exp};
+    return factor;
   }
 
   parseFactor () {
     const term = this.parseTerm();
-    let op = null;
-    let factor = null;
     const multOpToken = this.getToken();
     if(multOpToken.type === this.lexerClass.MULTI_OP) {
       this.pos++;
-      op = multOpToken.text; // TODO: source code line/column information
-      factor = this.parseFactor();
+      const op = multOpToken.text; // TODO: source code line/column information
+      const factor = this.parseFactor();
+      return new Expressions.InfixApp(op, term, factor);
     }
-
-    return {left: term, op: op, right: factor};
+    return term;
   }
 
   parseTerm () {
@@ -791,8 +789,8 @@ export class IVProgParser {
     return list;
   }
 
-  getTypesAsString (isFunction = false) {
-    const types = isFunction ? this.functionTypes : this.variableTypes;
+  getTypesAsString (scope = IVProgParser.BASE) {
+    const types = scope === IVProgParser.FUNCTION ? this.functionTypes : this.variableTypes;
     return types.map( x => this.lexer.literalNames[x])
       .reduce((o, n) => {
         if (o.length <= 0)

+ 7 - 0
js/ast/types.js

@@ -0,0 +1,7 @@
+export const Types = Object.freeze({
+  INTEGER: Symbol("int"),
+  REAL: Symbol("real"),
+  STRING: Symbol("string"),
+  BOOLEAN: Symbol("bool"),
+  VOID: Symbol("void")
+});

+ 2 - 2
karma.conf.js

@@ -1,4 +1,5 @@
 const webpackConfig = require('./webpack.config.js');
+process.env.CHROME_BIN = '/snap/bin/chromium';
  
 module.exports = function(config) {
   config.set({
@@ -8,7 +9,6 @@ module.exports = function(config) {
     exclude: [],
     //files/patterns to load in the browser
     files: [
-      './node_modules/phantomjs-polyfill-find/find-polyfill.js',
       {pattern: 'tests/*.spec.js',watched:true,served:true,included:true}
       /*parameters*/
           //watched: if autoWatch is true all files that have set watched to true will be watched for changes
@@ -32,7 +32,7 @@ module.exports = function(config) {
     //list of frameworks you want to use, only jasmine is installed automatically
     frameworks: ['jasmine'],
     //list of browsers to launch and capture
-    browsers: ['PhantomJS'/*,'PhantomJS','Firefox','Edge','ChromeCanary','Opera','IE','Safari'*/],
+    browsers: ['ChromeHeadless'/*,'PhantomJS','Firefox','Edge','ChromeCanary','Opera','IE','Safari'*/],
     //list of reporters to use
     reporters: ['mocha','kjhtml'/*,'dots','progress','spec'*/],
     

+ 84 - 447
package-lock.json

@@ -294,6 +294,15 @@
       "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
       "dev": true
     },
+    "agent-base": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+      "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
+      "dev": true,
+      "requires": {
+        "es6-promisify": "^5.0.0"
+      }
+    },
     "ajv": {
       "version": "6.5.2",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
@@ -571,15 +580,6 @@
       "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
       "dev": true
     },
-    "asn1": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
-      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
-      "dev": true,
-      "requires": {
-        "safer-buffer": "~2.1.0"
-      }
-    },
     "asn1.js": {
       "version": "4.10.1",
       "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
@@ -617,12 +617,6 @@
         }
       }
     },
-    "assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-      "dev": true
-    },
     "assign-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
@@ -650,30 +644,12 @@
       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
       "dev": true
     },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
-    },
     "atob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
       "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
       "dev": true
     },
-    "aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-      "dev": true
-    },
-    "aws4": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
-      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
-      "dev": true
-    },
     "babel-code-frame": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
@@ -1410,16 +1386,6 @@
       "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
       "dev": true
     },
-    "bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "tweetnacl": "^0.14.3"
-      }
-    },
     "better-assert": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
@@ -1722,18 +1688,6 @@
       "integrity": "sha512-29nr1EPiHwrJTAHHsEmTt2h+55L8j2GNFdAcYPlRy2NX6iFz7ZZiepVI7kP/QqlnHLq3KvfWpbmGa0d063U09w==",
       "dev": true
     },
-    "capability": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/capability/-/capability-0.2.5.tgz",
-      "integrity": "sha1-Ua2HNT8ZNv/Xfy8hx0YzpN6oiAE=",
-      "dev": true
-    },
-    "caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-      "dev": true
-    },
     "center-align": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
@@ -1931,15 +1885,6 @@
         "lodash": "^4.5.0"
       }
     },
-    "combined-stream": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
-      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
-      "dev": true,
-      "requires": {
-        "delayed-stream": "~1.0.0"
-      }
-    },
     "commander": {
       "version": "2.13.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
@@ -2170,15 +2115,6 @@
         "es5-ext": "^0.10.9"
       }
     },
-    "dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
     "date-format": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
@@ -2279,12 +2215,6 @@
         }
       }
     },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
-    },
     "depd": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -2357,17 +2287,6 @@
         "stream-shift": "^1.0.0"
       }
     },
-    "ecc-jsbn": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.1.0"
-      }
-    },
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -2519,17 +2438,6 @@
         "is-arrayish": "^0.2.1"
       }
     },
-    "error-polyfill": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/error-polyfill/-/error-polyfill-0.1.1.tgz",
-      "integrity": "sha1-J2ZUqtkv8mFVgqMjBmFzzBjaHq8=",
-      "dev": true,
-      "requires": {
-        "capability": "^0.2.5",
-        "o3": "^1.0.3",
-        "u3": "^0.1.0"
-      }
-    },
     "es5-ext": {
       "version": "0.10.46",
       "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
@@ -2558,6 +2466,15 @@
       "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
       "dev": true
     },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
     "es6-symbol": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
@@ -2889,12 +2806,6 @@
         "yauzl": "2.4.1"
       }
     },
-    "extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-      "dev": true
-    },
     "fast-deep-equal": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
@@ -3037,23 +2948,6 @@
       "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
       "dev": true
     },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
-      "dev": true
-    },
-    "form-data": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
-      "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
-      "dev": true,
-      "requires": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "1.0.6",
-        "mime-types": "^2.1.12"
-      }
-    },
     "fragment-cache": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -3082,17 +2976,6 @@
         "null-check": "^1.0.0"
       }
     },
-    "fs-extra": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
-      "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "jsonfile": "^2.1.0",
-        "klaw": "^1.0.0"
-      }
-    },
     "fs-write-stream-atomic": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -3664,15 +3547,6 @@
       "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
       "dev": true
     },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
     "glob": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
@@ -3789,48 +3663,6 @@
         }
       }
     },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-      "dev": true
-    },
-    "har-validator": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
-      "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
-      "dev": true,
-      "requires": {
-        "ajv": "^5.3.0",
-        "har-schema": "^2.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "5.5.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
-          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-          "dev": true,
-          "requires": {
-            "co": "^4.6.0",
-            "fast-deep-equal": "^1.0.0",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.3.0"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
-          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-          "dev": true
-        },
-        "json-schema-traverse": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
-          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-          "dev": true
-        }
-      }
-    },
     "has-ansi": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -3927,16 +3759,6 @@
         "minimalistic-assert": "^1.0.1"
       }
     },
-    "hasha": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
-      "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
-      "dev": true,
-      "requires": {
-        "is-stream": "^1.0.1",
-        "pinkie-promise": "^2.0.0"
-      }
-    },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -3987,23 +3809,33 @@
         "requires-port": "^1.0.0"
       }
     },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      }
-    },
     "https-browserify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
       "dev": true
     },
+    "https-proxy-agent": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+      "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.1.0",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
     "iconv-lite": {
       "version": "0.4.23",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
@@ -4307,12 +4139,6 @@
       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
       "dev": true
     },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
     "is-utf8": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@@ -4352,12 +4178,6 @@
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
       "dev": true
     },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-      "dev": true
-    },
     "istanbul-api": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz",
@@ -4475,13 +4295,6 @@
         "esprima": "^4.0.0"
       }
     },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "dev": true,
-      "optional": true
-    },
     "jsesc": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
@@ -4500,12 +4313,6 @@
       "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
       "dev": true
     },
-    "json-schema": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
-      "dev": true
-    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4521,45 +4328,18 @@
         "jsonify": "~0.0.0"
       }
     },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-      "dev": true
-    },
     "json5": {
       "version": "0.5.1",
       "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
       "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
       "dev": true
     },
-    "jsonfile": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-      "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
     "jsonify": {
       "version": "0.0.0",
       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
       "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
       "dev": true
     },
-    "jsprim": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.2.3",
-        "verror": "1.10.0"
-      }
-    },
     "karma": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/karma/-/karma-3.0.0.tgz",
@@ -4678,16 +4458,6 @@
         }
       }
     },
-    "karma-phantomjs-launcher": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz",
-      "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.0.1",
-        "phantomjs-prebuilt": "^2.1.7"
-      }
-    },
     "karma-webpack": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-3.0.0.tgz",
@@ -4702,27 +4472,12 @@
         "webpack-dev-middleware": "^2.0.6"
       }
     },
-    "kew": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
-      "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
-      "dev": true
-    },
     "kind-of": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
       "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
       "dev": true
     },
-    "klaw": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
-      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.9"
-      }
-    },
     "lazy-cache": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
@@ -5237,21 +4992,6 @@
       "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
       "dev": true
     },
-    "o3": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz",
-      "integrity": "sha1-GSzod6iC36Z1HwQSqGX6+y2h2sA=",
-      "dev": true,
-      "requires": {
-        "capability": "^0.2.5"
-      }
-    },
-    "oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "dev": true
-    },
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -5568,34 +5308,6 @@
       "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
       "dev": true
     },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
-      "dev": true
-    },
-    "phantomjs-polyfill-find": {
-      "version": "github:ptim/phantomjs-polyfill-find#026b69dcabe743265f5214775e42f8d1e8aabedc",
-      "from": "github:ptim/phantomjs-polyfill-find",
-      "dev": true
-    },
-    "phantomjs-prebuilt": {
-      "version": "2.1.16",
-      "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
-      "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
-      "dev": true,
-      "requires": {
-        "es6-promise": "^4.0.3",
-        "extract-zip": "^1.6.5",
-        "fs-extra": "^1.0.0",
-        "hasha": "^2.2.0",
-        "kew": "^0.7.0",
-        "progress": "^1.1.8",
-        "request": "^2.81.0",
-        "request-progress": "^2.0.1",
-        "which": "^1.2.10"
-      }
-    },
     "pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -5651,9 +5363,9 @@
       "dev": true
     },
     "progress": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
-      "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+      "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
       "dev": true
     },
     "promise-inflight": {
@@ -5662,6 +5374,12 @@
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
       "dev": true
     },
+    "proxy-from-env": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+      "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+      "dev": true
+    },
     "prr": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@@ -5674,12 +5392,6 @@
       "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
       "dev": true
     },
-    "psl": {
-      "version": "1.1.29",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
-      "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
-      "dev": true
-    },
     "public-encrypt": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
@@ -5720,6 +5432,42 @@
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true
     },
+    "puppeteer-core": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-1.7.0.tgz",
+      "integrity": "sha512-SpUOJL8gTPEuABGcZxKM3jg5s0rIwmRC6P9Jw/JTG3XFCVtUcYQru4Uwlz7jAXe6JEeeLOm6hApgGCmRyALiig==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "extract-zip": "^1.6.6",
+        "https-proxy-agent": "^2.2.1",
+        "mime": "^2.0.3",
+        "progress": "^2.0.0",
+        "proxy-from-env": "^1.0.0",
+        "rimraf": "^2.6.1",
+        "ws": "^5.1.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ws": {
+          "version": "5.2.2",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+          "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+          "dev": true,
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        }
+      }
+    },
     "qjobs": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
@@ -5944,43 +5692,6 @@
         "is-finite": "^1.0.0"
       }
     },
-    "request": {
-      "version": "2.88.0",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
-      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
-      "dev": true,
-      "requires": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.0",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.4.3",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      }
-    },
-    "request-progress": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
-      "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
-      "dev": true,
-      "requires": {
-        "throttleit": "^1.0.0"
-      }
-    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -6519,23 +6230,6 @@
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
       "dev": true
     },
-    "sshpk": {
-      "version": "1.14.2",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
-      "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
-      "dev": true,
-      "requires": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
-      }
-    },
     "ssri": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
@@ -6693,12 +6387,6 @@
       "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==",
       "dev": true
     },
-    "throttleit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
-      "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
-      "dev": true
-    },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -6793,24 +6481,6 @@
         "repeat-string": "^1.6.1"
       }
     },
-    "tough-cookie": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
-      "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
-      "dev": true,
-      "requires": {
-        "psl": "^1.1.24",
-        "punycode": "^1.4.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-          "dev": true
-        }
-      }
-    },
     "trim-right": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
@@ -6829,22 +6499,6 @@
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
       "dev": true
     },
-    "tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "dev": true,
-      "optional": true
-    },
     "type-is": {
       "version": "1.6.16",
       "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
@@ -6861,12 +6515,6 @@
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
       "dev": true
     },
-    "u3": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/u3/-/u3-0.1.0.tgz",
-      "integrity": "sha1-AGCSdmO2g1PFOc2pnpUR1mh+3Z0=",
-      "dev": true
-    },
     "uglify-es": {
       "version": "3.3.9",
       "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
@@ -7133,17 +6781,6 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
-    "verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      }
-    },
     "vm-browserify": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",

+ 1 - 3
package.json

@@ -29,7 +29,6 @@
     "babel-core": "^6.26.3",
     "babel-loader": "^7.1.5",
     "babel-preset-env": "^1.7.0",
-    "error-polyfill": "^0.1.1",
     "jasmine-core": "^3.2.1",
     "karma": "^3.0.0",
     "karma-chrome-launcher": "^2.2.0",
@@ -38,9 +37,8 @@
     "karma-jasmine": "^1.1.2",
     "karma-jasmine-html-reporter": "^1.3.1",
     "karma-mocha-reporter": "^2.2.5",
-    "karma-phantomjs-launcher": "^1.0.4",
     "karma-webpack": "^3.0.0",
-    "phantomjs-polyfill-find": "github:ptim/phantomjs-polyfill-find",
+    "puppeteer-core": "^1.7.0",
     "webpack": "^4.16.5",
     "webpack-cli": "^3.1.0"
   },

+ 4 - 3
tests/test00.spec.js

@@ -4,6 +4,7 @@ import {
 } from './../js/ast/ivprogParser';
 import * as Expressions from './../js/ast/expressions/';
 import * as Commands from './../js/ast/commands/';
+import { Types } from './../js/ast/types';
 
 describe("Testing Syntax Analysis for default", () => {
   var lang = 'pt_br';
@@ -15,13 +16,13 @@ describe("Testing Syntax Analysis for default", () => {
   it("it should produce a valid AST", () => {
     lexer  = Lexers[lang];
     input = `programa {
-    const real PI
+    const real PI = 1
     const inteiro a[5][5]
     }`;
 
     asa = {
-        global: [new Commands.Declaration('PI', 'real', null, true),
-        new Commands.ArrayDeclaration('a', 'int', new Expressions.IntLiteral(5), new Expressions.IntLiteral(5), null, true)],
+        global: [new Commands.Declaration('PI', Types.REAL, new Expressions.IntLiteral(1), true),
+        new Commands.ArrayDeclaration('a', Types.INTEGER, new Expressions.IntLiteral(5), new Expressions.IntLiteral(5), null, true)],
         functions: []
       };
       const as = new IVProgParser(input, lexer);