diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
index cc7c0dc..432a122 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
@@ -1758,4 +1758,18 @@
      * @param currentContext current context in the parsed tree
      */
     void exitUnknown2(Unknown2Context currentContext);
+    /**
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
+     * anydataStatement.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void enterAnydataStatement(AnydataStatementContext currentContext);
+    /**
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
+     * anydataStatement.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void exitAnydataStatement(AnydataStatementContext currentContext);
 }
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
index dba4193..749843f 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
@@ -23,6 +23,8 @@
 import org.onosproject.yang.compiler.datamodel.utils.Parsable;
 import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
 import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangListener;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AnydataStatementContext;
+import org.onosproject.yang.compiler.parser.impl.listeners.AnydataListener;
 import org.onosproject.yang.compiler.parser.impl.listeners.AppDataStructureListener;
 import org.onosproject.yang.compiler.parser.impl.listeners.AppExtendedNameListener;
 import org.onosproject.yang.compiler.parser.impl.listeners.ArgumentListener;
@@ -1952,4 +1954,14 @@
     public void exitUnknown2(Unknown2Context currentContext) {
         // do nothing
     }
+
+    @Override
+    public void enterAnydataStatement(AnydataStatementContext ctx) {
+        AnydataListener.processAnydataEntry(this, ctx);
+    }
+
+    @Override
+    public void exitAnydataStatement(AnydataStatementContext ctx) {
+        AnydataListener.processAnydataExit(this, ctx);
+    }
 }
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListener.java
new file mode 100644
index 0000000..b75cdf2
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListener.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAnydata;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangVersionHolder;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AnydataStatementContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ANYDATA_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MANDATORY_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangAnydataNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE_DOT_ONE;
+
+/*
+ * Reference: RFC7950 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC7950
+ * anydata-stmt        = anydata-keyword sep identifier-arg-str optsep
+ *                       (";" /
+ *                        "{" stmtsep
+ *                            ;; these stmts can appear in any order
+ *                            [when-stmt]
+ *                            *if-feature-stmt
+ *                            *must-stmt
+ *                            [config-stmt]
+ *                            [mandatory-stmt]
+ *                            [status-stmt]
+ *                            [description-stmt]
+ *                            [reference-stmt]
+ *                         "}") stmtsep
+ *
+ * ANTLR grammar rule
+ *  anydataStatement : ANYDATA_KEYWORD identifier (STMTEND |
+ *             LEFT_CURLY_BRACE stmtSep (whenStatement | ifFeatureStatement
+ *             | mustStatement | configStatement | mandatoryStatement
+ *             | statusStatement | descriptionStatement | referenceStatement)*
+ *             RIGHT_CURLY_BRACE) stmtSep;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "anydata"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 7950.
+ */
+public final class AnydataListener {
+
+    /**
+     * Creates a new anydata listener.
+     */
+    private AnydataListener() {
+    }
+
+    /**
+     * It is called when parser receives an input matching the grammar rule
+     * (anydata), performs validation and updates the data model tree.
+     *
+     * @param listener listener's object
+     * @param ctx      context object of the grammar rule
+     */
+    public static void processAnydataEntry(TreeWalkListener listener,
+                                           AnydataStatementContext ctx) {
+
+        // Check for stack to be non empty.
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, ANYDATA_DATA, ctx.identifier()
+                .getText(), ENTRY);
+
+        String identifier = getValidIdentifier(ctx.identifier().getText(), ANYDATA_DATA, ctx);
+
+        // Validate sub statement cardinality.
+        validateSubStatementsCardinality(ctx);
+
+        // Check for identifier collision
+        int line = ctx.getStart().getLine();
+        int charPositionInLine = ctx.getStart().getCharPositionInLine();
+        detectCollidingChildUtil(listener, line, charPositionInLine, identifier, ANYDATA_DATA);
+
+        YangAnydata anyData = getYangAnydataNode(JAVA_GENERATION);
+        anyData.setName(identifier);
+
+        anyData.setLineNumber(line);
+        anyData.setCharPosition(charPositionInLine);
+        anyData.setFileName(listener.getFileName());
+        /*
+         * If "config" is not specified, the default is the same as the parent
+         * schema node's "config" value.
+         */
+        if (ctx.configStatement().isEmpty()) {
+            boolean parentConfig = getParentNodeConfig(listener);
+            anyData.setConfig(parentConfig);
+        }
+
+        Parsable curData = listener.getParsedDataStack().peek();
+        // Module/Submodule yang version check to make sure anydata supported
+        // version
+        if (!((YangVersionHolder) listener.getParsedDataStack().get(0))
+                .getVersion().equals(ONE_DOT_ONE)) {
+            throw new ParserException("YANG file error : anydata with name " + ctx.identifier()
+                    .getText() + " at line number " + line + " in " + listener
+                    .getFileName() + " is feature of YANG version 1.1");
+        }
+        if (curData instanceof YangModule || curData instanceof YangSubModule
+                || curData instanceof YangContainer || curData instanceof YangList
+                || curData instanceof YangCase || curData instanceof YangNotification
+                || curData instanceof YangInput || curData instanceof YangOutput
+                || curData instanceof YangAugment || curData instanceof YangGrouping) {
+            YangNode curNode = (YangNode) curData;
+            try {
+                curNode.addChild(anyData);
+            } catch (DataModelException e) {
+                throw new ParserException(constructExtendedListenerErrorMessage(
+                        UNHANDLED_PARSED_DATA, ANYDATA_DATA,
+                        ctx.identifier().getText(), ENTRY, e.getMessage()));
+            }
+            listener.getParsedDataStack().push(anyData);
+        } else {
+            throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ANYDATA_DATA,
+                                                                    ctx.identifier().getText(), ENTRY));
+        }
+    }
+
+    /**
+     * It is called when parser exits from grammar rule (anydata), it perform
+     * validations and updates the data model tree.
+     *
+     * @param listener listener's object
+     * @param ctx      context object of the grammar rule
+     */
+    public static void processAnydataExit(TreeWalkListener listener,
+                                          AnydataStatementContext ctx) {
+
+        // Check for stack to be non empty.
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, ANYDATA_DATA, ctx.identifier().getText(), EXIT);
+
+        if (listener.getParsedDataStack().peek() instanceof YangAnydata) {
+            listener.getParsedDataStack().pop();
+        } else {
+            throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ANYDATA_DATA,
+                                                                    ctx.identifier().getText(), EXIT));
+        }
+    }
+
+    /**
+     * Validates the cardinality of anydata sub-statements as per grammar.
+     *
+     * @param ctx context object of the grammar rule
+     */
+    private static void validateSubStatementsCardinality(AnydataStatementContext ctx) {
+
+        String text = ctx.identifier().getText();
+        validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, ANYDATA_DATA, text);
+        validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, ANYDATA_DATA, text);
+        validateCardinalityMaxOne(ctx.mandatoryStatement(), MANDATORY_DATA, ANYDATA_DATA, text);
+        validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, ANYDATA_DATA, text);
+        validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, ANYDATA_DATA, text);
+        validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, ANYDATA_DATA, text);
+    }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java
index dbe46a8..5183cb0 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java
@@ -197,21 +197,22 @@
      */
     private static void valSubStatCardinality(AugmentStatementContext ctx) {
 
+        String text = ctx.augment().getText();
         validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
-                                  AUGMENT_DATA, ctx.augment().getText());
+                                  AUGMENT_DATA, text);
 
         validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA,
-                                  AUGMENT_DATA, ctx.augment().getText());
+                                  AUGMENT_DATA, text);
 
         validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
-                                  AUGMENT_DATA, ctx.augment().getText());
+                                  AUGMENT_DATA, text);
 
         validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, AUGMENT_DATA,
-                                  ctx.augment().getText());
+                                  text);
 
         validateCardinalityEitherOne(ctx.dataDefStatement(), DATA_DEF_DATA,
                                      ctx.caseStatement(), CASE_DATA,
-                                     AUGMENT_DATA, ctx.augment().getText(),
+                                     AUGMENT_DATA, text,
                                      ctx);
     }
 
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java
index 7185cb2..b182e12 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java
@@ -50,6 +50,7 @@
 import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
 import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangModuleNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
 
 /*
  * Reference: RFC6020 and YANG ANTLR Grammar
@@ -103,7 +104,7 @@
         yangModule.setFileName(listener.getFileName());
 
         if (ctx.moduleBody().moduleHeaderStatement().yangVersionStatement() == null) {
-            yangModule.setVersion((byte) 1);
+            yangModule.setVersion(ONE);
         }
 
         listener.getParsedDataStack().push(yangModule);
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java
index 678aa64..cc45272 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java
@@ -41,6 +41,7 @@
 import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
 import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangSubModuleNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
 
 /*
  * Reference: RFC6020 and YANG ANTLR Grammar
@@ -96,7 +97,7 @@
         yangSubModule.setCharPosition(ctx.getStart().getCharPositionInLine());
         yangSubModule.setFileName(listener.getFileName());
         if (ctx.submoduleBody().submoduleHeaderStatement().yangVersionStatement() == null) {
-            yangSubModule.setVersion((byte) 1);
+            yangSubModule.setVersion(ONE);
         }
 
         listener.getParsedDataStack().push(yangSubModule);
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java
index 69808e4..1110aae 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java
@@ -89,7 +89,7 @@
         // Check for stack to be non empty.
         checkStackIsNotEmpty(listener, MISSING_HOLDER, VERSION_DATA, ctx.version().getText(), ENTRY);
 
-        byte version = getValidVersion(ctx);
+        String version = getValidVersion(ctx);
 
         // Obtain the node of the stack.
         Parsable tmpNode = listener.getParsedDataStack().peek();
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
index 25ec87b..538e863 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
@@ -72,6 +72,8 @@
 import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.IN;
 import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TREE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE_DOT_ONE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_SQUARE_BRACKET;
 import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
 import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
@@ -100,7 +102,6 @@
     private static final Pattern PREDICATE =
             Pattern.compile("\\[(.*?)\\]");
     private static final String XML = "xml";
-    private static final String ONE = "1";
     private static final int IDENTIFIER_LENGTH = 64;
     private static final String DATE_FORMAT = "yyyy-MM-dd";
     private static final String REGEX_EQUAL = "[=]";
@@ -201,17 +202,16 @@
      * @param ctx version context object of the grammar rule
      * @return valid version
      */
-    public static byte getValidVersion(YangVersionStatementContext ctx) {
+    public static String getValidVersion(YangVersionStatementContext ctx) {
 
         String value = removeQuotesAndHandleConcat(ctx.version().getText());
-        if (!value.equals(ONE)) {
-            ParserException parserException = new ParserException("YANG file error: Input version not supported");
-            parserException.setLine(ctx.getStart().getLine());
-            parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
-            throw parserException;
+        if (value.equals(ONE) || value.equals(ONE_DOT_ONE)) {
+            return value;
         }
-
-        return Byte.valueOf(value);
+        ParserException parserException = new ParserException("YANG file error: Input version not supported");
+        parserException.setLine(ctx.getStart().getLine());
+        parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+        throw parserException;
     }
 
     /**
diff --git a/compiler/base/parser/src/main/resources/GeneratedYang.g4 b/compiler/base/parser/src/main/resources/GeneratedYang.g4
index 7167f7b..e30e150 100644
--- a/compiler/base/parser/src/main/resources/GeneratedYang.g4
+++ b/compiler/base/parser/src/main/resources/GeneratedYang.g4
@@ -370,7 +370,8 @@
      *                       list-stmt /
      *                       choice-stmt /
      *                       anyxml-stmt /
-     *                       uses-stmt
+     *                       uses-stmt /
+     *                       anydata-stmt
      */
     dataDefStatement : containerStatement
                     | leafStatement
@@ -378,7 +379,8 @@
                     | listStatement
                     | choiceStatement
                     | anyxmlStatement
-                    | usesStatement;
+                    | usesStatement
+                    | anydataStatement;
 
     /**
      *  if-feature-stmt     = if-feature-keyword sep identifier-ref-arg-str
@@ -951,7 +953,7 @@
      *                        anyxml-stmt
      */
     shortCaseStatement : containerStatement | leafStatement | leafListStatement
-            | listStatement | anyxmlStatement;
+            | listStatement | anyxmlStatement | anydataStatement;
 
     /**
      *  case-stmt           = case-keyword sep identifier-arg-str optsep
@@ -1357,6 +1359,28 @@
      */
     defaultDenyAllStatement : DEFAULT_DENY_ALL STMTEND;
 
+
+   /**
+    * anydata-stmt        = anydata-keyword sep identifier-arg-str optsep
+    *                       (";" /
+    *                        "{" stmtsep
+    *                            ;; these stmts can appear in any order
+    *                            [when-stmt]
+    *                            *if-feature-stmt
+    *                            *must-stmt
+    *                            [config-stmt]
+    *                            [mandatory-stmt]
+    *                            [status-stmt]
+    *                            [description-stmt]
+    *                            [reference-stmt]
+    *                         "}") stmtsep
+    */
+    anydataStatement : ANYDATA_KEYWORD identifier (STMTEND |
+               LEFT_CURLY_BRACE stmtSep (whenStatement | ifFeatureStatement
+               | mustStatement | configStatement | mandatoryStatement
+               | statusStatement | descriptionStatement | referenceStatement)*
+               RIGHT_CURLY_BRACE) stmtSep;
+
     /**
      * unknown-statement   = prefix ":" identifier [sep string] optsep
      *                        (";" / "{" *unknown-statement2 "}")
@@ -1456,4 +1480,5 @@
                   | FALSE_KEYWORD | MAX_KEYWORD | MIN_KEYWORD | NOT_SUPPORTED_KEYWORD | OBSOLETE_KEYWORD
                   | REPLACE_KEYWORD | SYSTEM_KEYWORD | TRUE_KEYWORD | UNBOUNDED_KEYWORD | USER_KEYWORD
                   | COMPILER_ANNOTATION_KEYWORD | APP_DATA_STRUCTURE_KEYWORD | DATA_STRUCTURE_KEYWORD
-                  | APP_EXTENDED_KEYWORD | DEFAULT_DENY_WRITE_KEYWORD | DEFAULT_DENY_ALL_KEYWORD;
+                  | APP_EXTENDED_KEYWORD | DEFAULT_DENY_WRITE_KEYWORD | DEFAULT_DENY_ALL_KEYWORD
+                  | ANYDATA_KEYWORD;
diff --git a/compiler/base/parser/src/main/resources/YangLexer.g4 b/compiler/base/parser/src/main/resources/YangLexer.g4
index 4f190b9..7a5e79c 100644
--- a/compiler/base/parser/src/main/resources/YangLexer.g4
+++ b/compiler/base/parser/src/main/resources/YangLexer.g4
@@ -118,6 +118,7 @@
     DEFAULT_DENY_WRITE : IDENTIFIER COLON DEFAULT_DENY_WRITE_KEYWORD;
     DEFAULT_DENY_ALL_KEYWORD : 'default-deny-all';
     DEFAULT_DENY_ALL : IDENTIFIER COLON DEFAULT_DENY_ALL_KEYWORD;
+    ANYDATA_KEYWORD : 'anydata';
 
     // Lexer tokens to be skipped
     COMMENT
diff --git a/compiler/base/parser/src/main/resources/YangLexer.tokens b/compiler/base/parser/src/main/resources/YangLexer.tokens
deleted file mode 100644
index 3192512..0000000
--- a/compiler/base/parser/src/main/resources/YangLexer.tokens
+++ /dev/null
@@ -1,199 +0,0 @@
-ANYXML_KEYWORD=1
-ARGUMENT_KEYWORD=2
-AUGMENT_KEYWORD=3
-BASE_KEYWORD=4
-BELONGS_TO_KEYWORD=5
-BIT_KEYWORD=6
-CASE_KEYWORD=7
-CHOICE_KEYWORD=8
-CONFIG_KEYWORD=9
-CONTACT_KEYWORD=10
-CONTAINER_KEYWORD=11
-DEFAULT_KEYWORD=12
-DESCRIPTION_KEYWORD=13
-ENUM_KEYWORD=14
-ERROR_APP_TAG_KEYWORD=15
-ERROR_MESSAGE_KEYWORD=16
-EXTENSION_KEYWORD=17
-DEVIATION_KEYWORD=18
-DEVIATE_KEYWORD=19
-FEATURE_KEYWORD=20
-FRACTION_DIGITS_KEYWORD=21
-GROUPING_KEYWORD=22
-IDENTITY_KEYWORD=23
-IF_FEATURE_KEYWORD=24
-IMPORT_KEYWORD=25
-INCLUDE_KEYWORD=26
-INPUT_KEYWORD=27
-KEY_KEYWORD=28
-LEAF_KEYWORD=29
-LEAF_LIST_KEYWORD=30
-LENGTH_KEYWORD=31
-LIST_KEYWORD=32
-MANDATORY_KEYWORD=33
-MAX_ELEMENTS_KEYWORD=34
-MIN_ELEMENTS_KEYWORD=35
-MODULE_KEYWORD=36
-MUST_KEYWORD=37
-NAMESPACE_KEYWORD=38
-NOTIFICATION_KEYWORD=39
-ORDERED_BY_KEYWORD=40
-ORGANIZATION_KEYWORD=41
-OUTPUT_KEYWORD=42
-PATH_KEYWORD=43
-PATTERN_KEYWORD=44
-POSITION_KEYWORD=45
-PREFIX_KEYWORD=46
-PRESENCE_KEYWORD=47
-RANGE_KEYWORD=48
-REFERENCE_KEYWORD=49
-REFINE_KEYWORD=50
-REQUIRE_INSTANCE_KEYWORD=51
-REVISION_KEYWORD=52
-REVISION_DATE_KEYWORD=53
-RPC_KEYWORD=54
-STATUS_KEYWORD=55
-SUBMODULE_KEYWORD=56
-TYPE_KEYWORD=57
-TYPEDEF_KEYWORD=58
-UNIQUE_KEYWORD=59
-UNITS_KEYWORD=60
-USES_KEYWORD=61
-VALUE_KEYWORD=62
-WHEN_KEYWORD=63
-YANG_VERSION_KEYWORD=64
-YIN_ELEMENT_KEYWORD=65
-ADD_KEYWORD=66
-CURRENT_KEYWORD=67
-DELETE_KEYWORD=68
-DEPRECATED_KEYWORD=69
-FALSE_KEYWORD=70
-MAX_KEYWORD=71
-MIN_KEYWORD=72
-NOT_SUPPORTED_KEYWORD=73
-OBSOLETE_KEYWORD=74
-REPLACE_KEYWORD=75
-SYSTEM_KEYWORD=76
-TRUE_KEYWORD=77
-UNBOUNDED_KEYWORD=78
-USER_KEYWORD=79
-COMPILER_ANNOTATION_KEYWORD=80
-COMPILER_ANNOTATION=81
-APP_DATA_STRUCTURE_KEYWORD=82
-APP_DATA_STRUCTURE=83
-DATA_STRUCTURE_KEYWORD=84
-DATA_STRUCTURE=85
-DATA_STRUCTURE_KEY=86
-APP_EXTENDED_KEYWORD=87
-APP_EXTENDED=88
-DEFAULT_DENY_WRITE_KEYWORD=89
-DEFAULT_DENY_WRITE=90
-DEFAULT_DENY_ALL_KEYWORD=91
-DEFAULT_DENY_ALL=92
-COMMENT=93
-WS=94
-LINE_COMMENT=95
-INTEGER=96
-DATE_ARG=97
-LEFT_CURLY_BRACE=98
-RIGHT_CURLY_BRACE=99
-IDENTIFIER=100
-STMTEND=101
-DQUOTE=102
-COLON=103
-PLUS=104
-MINUS=105
-UNKNOWN_STATEMENT=106
-STRING=107
-'anyxml'=1
-'argument'=2
-'augment'=3
-'base'=4
-'belongs-to'=5
-'bit'=6
-'case'=7
-'choice'=8
-'config'=9
-'contact'=10
-'container'=11
-'default'=12
-'description'=13
-'enum'=14
-'error-app-tag'=15
-'error-message'=16
-'extension'=17
-'deviation'=18
-'deviate'=19
-'feature'=20
-'fraction-digits'=21
-'grouping'=22
-'identity'=23
-'if-feature'=24
-'import'=25
-'include'=26
-'input'=27
-'key'=28
-'leaf'=29
-'leaf-list'=30
-'length'=31
-'list'=32
-'mandatory'=33
-'max-elements'=34
-'min-elements'=35
-'module'=36
-'must'=37
-'namespace'=38
-'notification'=39
-'ordered-by'=40
-'organization'=41
-'output'=42
-'path'=43
-'pattern'=44
-'position'=45
-'prefix'=46
-'presence'=47
-'range'=48
-'reference'=49
-'refine'=50
-'require-instance'=51
-'revision'=52
-'revision-date'=53
-'rpc'=54
-'status'=55
-'submodule'=56
-'type'=57
-'typedef'=58
-'unique'=59
-'units'=60
-'uses'=61
-'value'=62
-'when'=63
-'yang-version'=64
-'yin-element'=65
-'add'=66
-'current'=67
-'delete'=68
-'deprecated'=69
-'false'=70
-'max'=71
-'min'=72
-'not-supported'=73
-'obsolete'=74
-'replace'=75
-'system'=76
-'true'=77
-'unbounded'=78
-'user'=79
-'compiler-annotation'=80
-'app-data-structure'=82
-'data-structure'=84
-'app-extended-name'=87
-'default-deny-write'=89
-'default-deny-all'=91
-'{'=98
-'}'=99
-';'=101
-'"'=102
-':'=103
-'+'=104
-'-'=105
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListenerTest.java
new file mode 100644
index 0000000..d3ed0eb
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AnydataListenerTest.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangAnydata;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing anydata listener.
+ */
+public class AnydataListenerTest {
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+    /**
+     * Checks anydata statement as sub-statement of module.
+     */
+    @Test
+    public void processModuleSubStatementAnydata() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/ModuleSubStatementAnydata.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+
+        // Check whether the node type is set properly to module.
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+        // Check whether the module name is set correctly.
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        // Check whether the anydata is child of module
+        YangAnydata anyData = (YangAnydata) yangNode.getChild();
+        assertThat(anyData.getName(), is("valid"));
+    }
+
+    /**
+     * Checks if anydata identifier in module is duplicate.
+     */
+    @Test(expected = ParserException.class)
+    public void processModuleDuplicateAnydata() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/ModuleDuplicateAnydata.yang");
+    }
+
+    /**
+     * Checks if anydata identifier in list is duplicate.
+     */
+    @Test(expected = ParserException.class)
+    public void processListDuplicateAnydata() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/ListDuplicateAnydata.yang");
+    }
+
+    /**
+     * Checks if anydata identifier collides with list at same level.
+     */
+    @Test(expected = ParserException.class)
+    public void processDuplicateAnydataAndList() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/DuplicateAnydataAndList.yang");
+    }
+
+    /**
+     * Checks anydata statement as sub-statement of list.
+     */
+    @Test
+    public void processListSubStatementAnydata() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/ListSubStatementAnydata.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+
+        // Check whether the node type is set properly to module.
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+        // Check whether the module name is set correctly.
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        // Check whether the list is child of module
+        YangList yangList1 = (YangList) yangNode.getChild();
+        assertThat(yangList1.getName(), is("ospf"));
+
+        Iterator<String> keyList = yangList1.getKeyList().iterator();
+        assertThat(keyList.next(), is("process-id"));
+
+        // Check whether the list is child of list
+        YangAnydata yangAnydata = (YangAnydata) yangList1.getChild();
+        assertThat(yangAnydata.getName(), is("interface"));
+    }
+
+    /**
+     * Checks anydata with all its sub-statements.
+     */
+    @Test
+    public void processAnydataSubStatements() throws IOException,
+            ParserException {
+
+        YangNode node = manager.getDataModel(
+                "src/test/resources/AnydataSubStatements.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+
+        // Check whether the node type is set properly to module.
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+        // Check whether the module name is set correctly.
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        // Check whether the anydata is child of module
+        YangAnydata yangAnydata = (YangAnydata) yangNode.getChild();
+
+        // Check whether anydata properties as set correctly.
+        assertThat(yangAnydata.getName(), is("ospf"));
+
+        assertThat(yangAnydata.isConfig(), is(true));
+        assertThat(yangAnydata.getDescription(), is("\"anydata description\""));
+        assertThat(yangAnydata.getStatus(), is(YangStatusType.CURRENT));
+        assertThat(yangAnydata.getReference(), is("\"anydata reference\""));
+    }
+
+    /**
+     * Checks cardinality of sub-statements of anydata.
+     */
+    @Test
+    public void processAnydataSubStatementCardinality() throws IOException,
+            ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("YANG file error: \"reference\" is defined more" +
+                                     " than once in \"anydata valid\".");
+        YangNode node = manager.getDataModel(
+                "src/test/resources/AnydataSubStatementCardinality.yang");
+    }
+
+    /**
+     * Checks anydata as root node.
+     */
+    @Test
+    public void processAnydataRootNode() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("no viable alternative at input 'anydata'");
+        YangNode node = manager.getDataModel(
+                "src/test/resources/AnydataRootNode.yang");
+    }
+
+    /**
+     * Checks invalid identifier for anydata statement.
+     */
+    @Test
+    public void processAnydataInvalidIdentifier() throws IOException,
+            ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage(
+                "YANG file error : anydata name 1valid is not valid.");
+        YangNode node = manager.getDataModel(
+                "src/test/resources/AnydataInvalidIdentifier.yang");
+    }
+
+    /**
+     * Checks invalid identifier for anydata statement.
+     */
+    @Test
+    public void processAnydataInvalidVersionTest() throws IOException,
+            ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage(
+                "YANG file error : anydata with name valid at line number 5 " +
+                        "in src/test/resources/AnydataInvalidVersion.yang is feature of YANG version 1.1");
+        YangNode node = manager.getDataModel(
+                "src/test/resources/AnydataInvalidVersion.yang");
+    }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java
index 19fdd5f..8371e88 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java
@@ -53,7 +53,7 @@
         // Check whether the module name is set correctly.
         assertThat(yangNode.getName(), is("Test"));
         // Checks for the version value in data model tree.
-        assertThat(yangNode.getVersion(), is((byte) 1));
+        assertThat(yangNode.getVersion(), is("1"));
         // Checks identifier of belongsto in data model tree.
         assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
         // Checks for the version value in data model tree.
@@ -79,7 +79,7 @@
         // Check whether the module name is set correctly.
         assertThat(yangNode.getName(), is("Test"));
         // Checks for the version value in data model tree.
-        assertThat(yangNode.getVersion(), is((byte) 1));
+        assertThat(yangNode.getVersion(), is("1"));
         // Checks identifier of belongsto in data model tree.
         assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
         // Checks for the version value in data model tree.
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java
index 21bd740..bd775c8 100644
--- a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java
@@ -52,7 +52,7 @@
         YangNode node = manager.getDataModel("src/test/resources/VersionValidEntry.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getVersion(), is((byte) 1));
+        assertThat(((YangModule) node).getVersion(), is("1"));
     }
 
     /**
@@ -64,7 +64,7 @@
         YangNode node = manager.getDataModel("src/test/resources/ValidVersionWithDoubleQuotes.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getVersion(), is((byte) 1));
+        assertThat(((YangModule) node).getVersion(), is("1"));
     }
 
     /**
@@ -76,7 +76,7 @@
         YangNode node = manager.getDataModel("src/test/resources/VersionNotPresent.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getVersion(), is((byte) 1));
+        assertThat(((YangModule) node).getVersion(), is("1"));
     }
 
     /**
@@ -97,7 +97,7 @@
         YangNode node = manager.getDataModel("src/test/resources/VersionOrder.yang");
 
         // Checks for the version value in data model tree.
-        assertThat(((YangModule) node).getVersion(), is((byte) 1));
+        assertThat(((YangModule) node).getVersion(), is("1"));
     }
 
     /**
diff --git a/compiler/base/parser/src/test/resources/AnydataInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/AnydataInvalidIdentifier.yang
new file mode 100644
index 0000000..83b7547
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/AnydataInvalidIdentifier.yang
@@ -0,0 +1,9 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata 1valid {
+            status current;
+            reference "RFC 7950";
+    }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/AnydataInvalidVersion.yang b/compiler/base/parser/src/test/resources/AnydataInvalidVersion.yang
new file mode 100644
index 0000000..74d1d3c
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/AnydataInvalidVersion.yang
@@ -0,0 +1,9 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata valid {
+            status current;
+            reference "RFC 7950";
+    }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/AnydataRootNode.yang b/compiler/base/parser/src/test/resources/AnydataRootNode.yang
new file mode 100644
index 0000000..393e8e3
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/AnydataRootNode.yang
@@ -0,0 +1,4 @@
+anydata valid {
+    status current;
+    reference "RFC 7950";
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/AnydataSubStatementCardinality.yang b/compiler/base/parser/src/test/resources/AnydataSubStatementCardinality.yang
new file mode 100644
index 0000000..84c8f06
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/AnydataSubStatementCardinality.yang
@@ -0,0 +1,10 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata valid {
+        reference "RFC 7950";
+        reference "RFC 7950";
+        status current;
+    }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/AnydataSubStatements.yang b/compiler/base/parser/src/test/resources/AnydataSubStatements.yang
new file mode 100644
index 0000000..fb075c4
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/AnydataSubStatements.yang
@@ -0,0 +1,11 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata ospf {
+        config true;
+        description "anydata description";
+        status current;
+        reference "anydata reference";
+    }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/DuplicateAnydataAndList.yang b/compiler/base/parser/src/test/resources/DuplicateAnydataAndList.yang
new file mode 100644
index 0000000..5574243
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/DuplicateAnydataAndList.yang
@@ -0,0 +1,25 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    container ospf {
+        anydata valid {
+            status current;
+            reference "RFC 7950";
+        }
+        list valid {
+            key "process-id";
+            container interface {
+                leaf invalid-interval {
+                    type "uint16";
+                    units "seconds";
+                    status current;
+                    reference "RFC 6020";
+                }
+            }
+            leaf process-id {
+                type "string";
+            }
+        }
+    }
+}
diff --git a/compiler/base/parser/src/test/resources/ListDuplicateAnydata.yang b/compiler/base/parser/src/test/resources/ListDuplicateAnydata.yang
new file mode 100644
index 0000000..6313c69
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/ListDuplicateAnydata.yang
@@ -0,0 +1,19 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    list ospf {
+        key "process-id";
+        anydata interface {
+            status current;
+            reference "RFC 7950";
+        }
+        leaf process-id {
+            type "string";
+        }
+        anydata interface {
+            status current;
+            reference "RFC 7950";
+        }
+    }
+}
diff --git a/compiler/base/parser/src/test/resources/ListSubStatementAnydata.yang b/compiler/base/parser/src/test/resources/ListSubStatementAnydata.yang
new file mode 100644
index 0000000..375c42a
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/ListSubStatementAnydata.yang
@@ -0,0 +1,15 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    list ospf {
+        key "process-id";
+        anydata interface {
+            status current;
+            reference "RFC 7950";
+        }
+        leaf process-id {
+            type "string";
+        }
+    }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/ModuleDuplicateAnydata.yang b/compiler/base/parser/src/test/resources/ModuleDuplicateAnydata.yang
new file mode 100644
index 0000000..16fe694
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/ModuleDuplicateAnydata.yang
@@ -0,0 +1,17 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata valid {
+        status current;
+        reference "RFC 7950";
+    }
+    anydata invalid {
+        status current;
+        reference "RFC 7950";
+    }
+    anydata valid {
+        status current;
+        reference "RFC 7950";
+    }
+}
diff --git a/compiler/base/parser/src/test/resources/ModuleSubStatementAnydata.yang b/compiler/base/parser/src/test/resources/ModuleSubStatementAnydata.yang
new file mode 100644
index 0000000..947f420
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/ModuleSubStatementAnydata.yang
@@ -0,0 +1,9 @@
+module Test {
+    yang-version 1.1;
+    namespace http://huawei.com;
+    prefix Ant;
+    anydata valid {
+        status current;
+        reference "RFC 7950";
+    }
+}
\ No newline at end of file
