diff --git a/lib/src/parser/parser.dart b/lib/src/parser/parser.dart index e4d170c..6fdad0e 100644 --- a/lib/src/parser/parser.dart +++ b/lib/src/parser/parser.dart @@ -303,46 +303,156 @@ class Parser { //Start of parsers for Statements================================================== //================================================================================= //================================================================================= - - - LocalVariableType parseLocalVariableType() + // + LocalVariableInitializer parseLocalVariableInitializer() { - int startPos = _position; - LocalVariableType output = LocalVariableType(List()); - output.value.add(parseType()); - return output; + var tmpExp = ParseExpression(); + var output = LocalVariableInitializer(List()); + if (tmpExp != null) + { + output.value.add(tmpExp); + _position++; + } } - LocalVariableDeclarator parseLocalVariableDeclarator() { + var startPos = _position; + var output = LocalVariableDeclarator(List()); + if (_tokens[_position].type == TokenType.identifier) + { + output.value.add(_tokens[_position]); + _position++; + if (_tokens[_position].value == '=') + { + output.value.add(_tokens[_position]); + _position++; + var tmpLocVarInit = parseLocalVariableInitializer(); + } + else + { + return output; + } + } + _position = startPos; + return null; + } + LocalVariableDeclarators parseLocalVariableDeclarators() + { + var startPos = _position; + var output = LocalVariableDeclarators(List()); + var tmpVarDec = parseLocalVariableDeclarator(); + if (tmpVarDec != null) + { + output.value.add(tmpVarDec); + _position++; + if (_tokens[_position].value == ',') + { + output.value.add(_tokens[_position]); + _position++; + var moretmpVarDec = parseLocalVariableDeclarators(); + if (moretmpVarDec != null) + { + output.value.add(moretmpVarDec); + _position++; + return output; + } + _position = startPos; + return null; + } + else + { + return output; + } + } + _position = startPos; + return null; + } + + + LocalVariableType parseLocalVariableType() + { + var startPos = _position; + var output = LocalVariableType(List()); + var tmpType = parseType(); + if (tmpType != null) + { + output.value.add(tmpType); + _position++; + return output; + } + _position = startPos; + return null; } LocalVariableDeclaration parseLocalVariableDeclaration() { - int startPos = _position; - LocalVariableDeclaration output = LocalVariableDeclaration(List()); - LocalVariableType newLocalVarType = parseLocalVariableType(); - if (LocalVariableType != null) + var startPos = _position; + var output = LocalVariableDeclaration(List()); + var newLocalVarType = parseLocalVariableType(); + if (newLocalVarType != null) { output.value.add(newLocalVarType); _position++; - LocalVariableDeclarator newLocalVarDec = parseLocalVariableDeclarator(); - output.value.add(newLocalVarDec); + var newLocalVarDec = parseLocalVariableDeclarators(); + if (newLocalVarDec != null) + { + output.value.add(newLocalVarDec); + _position++; + return output; + } + _position = startPos; + return null; + } + _position = startPos; + return null; + } + + ConstantDeclaration parseConstantDeclaration() + { + var startPos = _position; + var output = ConstantDeclaration(List()); + if (_tokens[_position].value == "const") + { + output.value.add(_tokens[_position]); + _position++; + if (_tokens[_position].type == TokenType.identifier) + { + output.value.add(_tokens[_position]); + _position++; + if (_tokens[_position].value == "=") + { + output.value.add(_tokens[_position]); + _position++; + var tmpExpr = ParseExpression(); + if (tmpExpr != null) + { + output.value.add(tmpExpr); + _position++; + return output; + } + _position = startPos; + return null; + } + _position = startPos; + return null; + } + _position = startPos; + return null; } - _position++; + _position = startPos; return null; } - parseConstantDeclaration + //==================================================================== //top level parsers for Statements==================================== //==================================================================== LabeledStatement parseLabeledStatement() { - int startPos = _position; - LabeledStatement output = LabeledStatement(List()); + var startPos = _position; + var output = LabeledStatement(List()); if (_tokens[_position].type == TokenType.identifier) { output.value.add(_tokens[_position]); @@ -358,32 +468,41 @@ class Parser { _position++; return output; } + _position = startPos; + return null; } + _position = startPos; + return null; } + _position = startPos; return null; } DeclarationStatement parseDeclarationStatement() { - // DeclarationStatement output; - // var tmp = parseLocalVariableDeclaration(); - // if (tmp != null && _tokens[_position + 1].value == ';') - // { - // output.value.add(tmp); - // _position++; - // output.value.add(_tokens[_position]); - // _position++; - // } - // else - // { - // var tmp = parseConstantDeclaration(); - // if () - // output.value.add(parseLocalVariableDeclaration()); - // _position++; - // output.value.add(_tokens[_position]); - // _position++; - // } - // return output; + var startPos = _position; + var output = DeclarationStatement(List()); + var tmp = parseLocalVariableDeclaration(); + if (tmp != null && _tokens[_position].value == ';') + { + output.value.add(tmp); + output.value.add(_tokens[_position]); + _position++; + return output; + } + else + { + var tmp = parseConstantDeclaration(); + if (tmp != null && _tokens[_position].value == ';') + { + output.value.add(tmp); + output.value.add(_tokens[_position]); + _position++; + return output; + } + } + _position = startPos; + return null; } //Done @@ -709,6 +828,7 @@ class Parser { } } } + } //==================================================================== @@ -852,7 +972,7 @@ class Parser { NOT SUPPORTED: alias element access not supported because there is no array support - 'base' keyword + 'base' keyword post decrement and increment anonymous object creation delegate diff --git a/lib/src/statements/variants/DeclarationStatementVariants/LocalConstantDeclarationVariants/constant_declarator.dart b/lib/src/statements/variants/DeclarationStatementVariants/LocalConstantDeclarationVariants/constant_declarator.dart deleted file mode 100644 index a686834..0000000 --- a/lib/src/statements/variants/DeclarationStatementVariants/LocalConstantDeclarationVariants/constant_declarator.dart +++ /dev/null @@ -1,33 +0,0 @@ -import '../constant_declaration.dart'; -// import '../../statement.dart'; - -enum ConstantDeclaratorTypes { - constant_declarators, -} - -class ConstantDeclarator implements ConstantDeclaration { - - ConstantDeclarator( - this._value, - ): super(); - - static final ConstantDeclarationTypes _type = ConstantDeclarationTypes.constant_declaration; - final List _value; - - @override - Object get type { - assert(_type == ConstantDeclarationTypes.constant_declaration); - return _type; - } - - @override - List get value { - return _value; - } - - // @override - // bool equals(Statement token){ - // return token.type == DeclarationStatementType.constant_declaration; - // } - -} diff --git a/lib/src/statements/variants/DeclarationStatementVariants/constant_declaration.dart b/lib/src/statements/variants/DeclarationStatementVariants/constant_declaration.dart index 0f28dc8..1aa2d0b 100644 --- a/lib/src/statements/variants/DeclarationStatementVariants/constant_declaration.dart +++ b/lib/src/statements/variants/DeclarationStatementVariants/constant_declaration.dart @@ -1,9 +1,9 @@ import '../declaration_statement.dart'; // import '../../statement.dart'; -enum ConstantDeclarationTypes { - constant_declarator, -} +// enum ConstantDeclarationTypes { +// constant_declarator, +// } class ConstantDeclaration implements DeclarationStatement { @@ -11,12 +11,12 @@ class ConstantDeclaration implements DeclarationStatement { this._value, ): super(); - static final DeclarationStatementType _type = DeclarationStatementType.local_constant_declaration; + static final DeclarationStatementType _type = DeclarationStatementType.constant_declaration; final List _value; @override Object get type { - assert(_type == DeclarationStatementType.local_constant_declaration); + assert(_type == DeclarationStatementType.constant_declaration); return _type; } diff --git a/lib/src/statements/variants/declaration_statement.dart b/lib/src/statements/variants/declaration_statement.dart index 7628a03..5fccddf 100644 --- a/lib/src/statements/variants/declaration_statement.dart +++ b/lib/src/statements/variants/declaration_statement.dart @@ -5,7 +5,7 @@ enum DeclarationStatementType { constant_declaration, } -abstract class DeclarationStatement implements Statement { +class DeclarationStatement implements Statement { DeclarationStatement( this._value, diff --git a/lib/statement.dart b/lib/statement.dart index 1800069..b746874 100644 --- a/lib/statement.dart +++ b/lib/statement.dart @@ -23,6 +23,9 @@ export 'src/statements/variants/DeclarationStatementVariants/LocalVariableDeclar //src/statements/variants/DeclarationStatementVariants/LocalVariableDeclarationVariants/LocalVariableDeclaratorsVariants/ export 'src/statements/variants/DeclarationStatementVariants/LocalVariableDeclarationVariants/LocalVariableDeclaratorsVariants/local_variable_declarator.dart'; +//src/statements/variants/DeclarationStatementVariants/LocalVariableDeclarationVariants/LocalVariableDeclaratorsVariants/LocalVariableDeclaratorVariants +export 'src/statements/variants/DeclarationStatementVariants/LocalVariableDeclarationVariants/LocalVariableDeclaratorsVariants/LocalVariableDeclaratorVariants/local_variable_initializer.dart'; + /////===================================================================================== /////======================EMBEDDEDSTATEMENTS========================================== /// /////=====================================================================================