YANG sub module linking + unsupported yang construct + defect fix

Change-Id: I224c8c14ee2111f6844278cb540c48651544f59b
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
index 7fd8a1a..417e07e 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
@@ -57,6 +57,11 @@
     private String belongsToModuleName;
 
     /**
+     * Module node to which sub-module belongs to.
+     */
+    private YangNode moduleNode;
+
+    /**
      * Reference RFC 6020.
      *
      * The mandatory "prefix" substatement assigns a prefix for the module to
@@ -110,6 +115,24 @@
     }
 
     /**
+     * Returns the module data model node.
+     *
+     * @return the module data model node
+     */
+    public YangNode getModuleNode() {
+        return moduleNode;
+    }
+
+    /**
+     * Sets the module node.
+     *
+     * @param moduleNode module data model node
+     */
+    public void setModuleNode(YangNode moduleNode) {
+        this.moduleNode = moduleNode;
+    }
+
+    /**
      * Returns the type of the data as belongs-to.
      *
      * @return ParsedDataType returns BELONGS_TO_DATA
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
index 49a96d9..e8d60bf 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -135,6 +135,12 @@
     private YangStatusType status;
 
     /**
+     * Default value in string, needs to be converted to the target object,
+     * based on the type.
+     */
+    private String defaultValueInString;
+
+    /**
      * Create a choice node.
      */
     public YangChoice() {
@@ -276,6 +282,24 @@
     }
 
     /**
+     * Returns the default value.
+     *
+     * @return the default value
+     */
+    public String getDefaultValueInString() {
+        return defaultValueInString;
+    }
+
+    /**
+     * Sets the default value.
+     *
+     * @param defaultValueInString the default value
+     */
+    public void setDefaultValueInString(String defaultValueInString) {
+        this.defaultValueInString = defaultValueInString;
+    }
+
+    /**
      * Returns the type of the data.
      *
      * @return choice data
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index c9808a2..f59cdcc 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -101,6 +101,12 @@
     private YangType<?> dataType;
 
     /**
+     * Default value in string, needs to be converted to the target object,
+     * based on the type.
+     */
+    private String defaultValueInString;
+
+    /**
      * Creates a YANG leaf.
      */
     public YangLeaf() {
@@ -239,6 +245,24 @@
     }
 
     /**
+     * Returns the default value.
+     *
+     * @return the default value
+     */
+    public String getDefaultValueInString() {
+        return defaultValueInString;
+    }
+
+    /**
+     * Sets the default value.
+     *
+     * @param defaultValueInString the default value
+     */
+    public void setDefaultValueInString(String defaultValueInString) {
+        this.defaultValueInString = defaultValueInString;
+    }
+
+    /**
      * Returns the data type.
      *
      * @return the data type
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index 2b0bb53..246ffa2 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -445,16 +445,10 @@
 
         /* A list must have atleast one key leaf if config is true */
         if (isConfig
-                && (keys == null || leaves == null && leafLists == null)) {
+                && (keys == null || leaves == null && leafLists == null && !isUsesPresentInList())) {
             throw new DataModelException("A list must have atleast one key leaf if config is true;");
         } else if (keys != null) {
-            if (leaves != null) {
-                validateLeafKey(leaves, keys);
-            }
-
-            if (leafLists != null) {
-                validateLeafListKey(leafLists, keys);
-            }
+            validateKey(leaves, leafLists, keys);
         }
     }
 
@@ -528,31 +522,51 @@
      * Validates key statement of list.
      *
      * @param leaves list of leaf attributes of list
+     * @param leafLists list of leaf-list attributes of list
      * @param keys list of key attributes of list
      * @throws DataModelException a violation of data model rules
      */
-    private void validateLeafKey(List<YangLeaf> leaves, List<String> keys) throws DataModelException {
+    private void validateKey(List<YangLeaf> leaves, List<YangLeafList> leafLists, List<String> keys) throws
+            DataModelException {
         boolean leafFound = false;
         List<YangLeaf> keyLeaves = new LinkedList<>();
+        List<YangLeafList> keyLeafLists = new LinkedList<>();
 
         /*
          * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf
          * that is part of the key must not be the built-in type "empty".
          */
         for (String key : keys) {
-            for (YangLeaf leaf : leaves) {
-                if (key.equals(leaf.getName())) {
-                    if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) {
-                        throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
-                                "type \"empty\".");
+            if (leaves != null && !leaves.isEmpty()) {
+                for (YangLeaf leaf : leaves) {
+                    if (key.equals(leaf.getName())) {
+                        if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) {
+                            throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
+                                    "type \"empty\".");
+                        }
+                        leafFound = true;
+                        keyLeaves.add(leaf);
+                        break;
                     }
-                    leafFound = true;
-                    keyLeaves.add(leaf);
-                    break;
                 }
             }
-            if (!leafFound) {
-                throw new DataModelException("Leaf identifier must refer to a child leaf of the list");
+
+            if (leafLists != null && !leafLists.isEmpty()) {
+                for (YangLeafList leafList : leafLists) {
+                    if (key.equals(leafList.getName())) {
+                        if (leafList.getDataType().getDataType() == YangDataTypes.EMPTY) {
+                            throw new DataModelException(" A leaf-list that is part of the key" +
+                                    " must not be the built-in type \"empty\".");
+                        }
+                        leafFound = true;
+                        keyLeafLists.add(leafList);
+                        break;
+                    }
+                }
+            }
+
+            if (!leafFound && !isUsesPresentInList()) {
+                throw new DataModelException("An identifier, in key, must refer to a child leaf of the list");
             }
             leafFound = false;
         }
@@ -567,42 +581,8 @@
                         " \"config\" as the list itself.");
             }
         }
-    }
 
-    /**
-     * Validates key statement of list.
-     *
-     * @param leafLists list of leaf-list attributes of list
-     * @param keys list of key attributes of list
-     * @throws DataModelException a violation of data model rules
-     */
-    private void validateLeafListKey(List<YangLeafList> leafLists, List<String> keys) throws DataModelException {
-        boolean leafFound = false;
-        List<YangLeafList> keyLeafLists = new LinkedList<>();
-
-        /*
-         * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf
-         * that is part of the key must not be the built-in type "empty".
-         */
-        for (String key : keys) {
-            for (YangLeafList leafList : leafLists) {
-                if (key.equals(leafList.getName())) {
-                    if (leafList.getDataType().getDataType() == YangDataTypes.EMPTY) {
-                        throw new DataModelException(" A leaf-list that is part of the key must not be the built-in " +
-                                "type \"empty\".");
-                    }
-                    leafFound = true;
-                    keyLeafLists.add(leafList);
-                    break;
-                }
-            }
-            if (!leafFound) {
-                throw new DataModelException("Leaf-list identifier must refer to a child leaf of the list");
-            }
-            leafFound = false;
-        }
-
-        /*
+         /*
          * All key leafs in a list MUST have the same value for their "config"
          * as the list itself.
          */
@@ -627,4 +607,16 @@
                     getName() + "\"");
         }
     }
+
+    private boolean isUsesPresentInList() {
+        YangNode node = this.getChild();
+        while (node != null) {
+            if (node instanceof YangUses) {
+                return true;
+            }
+            node = node.getNextSibling();
+        }
+        return false;
+    }
+
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
index d66f170..d645010 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
@@ -19,6 +19,8 @@
 import java.util.LinkedList;
 import java.util.List;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.parser.Parsable;
+import org.onosproject.yangutils.utils.YangConstructType;
 import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo;
 
 import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString;
@@ -55,7 +57,7 @@
  * @param <T> range type (data type)
  */
 public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>>
-        implements YangDesc, YangReference, YangAppErrorInfo {
+        implements YangDesc, YangReference, YangAppErrorInfo, Parsable {
 
     /**
      * Ascending list of range interval restriction. If the restriction is a
@@ -311,4 +313,19 @@
     public void setErrorAppTag(String errTag) {
         errorAppTag = errTag;
     }
+
+    @Override
+    public YangConstructType getYangConstructType() {
+        return YangConstructType.RANGE_DATA;
+    }
+
+    @Override
+    public void validateDataOnEntry() throws DataModelException {
+        //TODO: implement the method.
+    }
+
+    @Override
+    public void validateDataOnExit() throws DataModelException {
+        //TODO: implement the method.
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
index 715e315..2a2ebf4 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
@@ -16,6 +16,9 @@
 
 package org.onosproject.yangutils.datamodel;
 
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.parser.Parsable;
+import org.onosproject.yangutils.utils.YangConstructType;
 import org.onosproject.yangutils.utils.builtindatatype.YangUint64;
 
 /*-
@@ -28,7 +31,7 @@
 /**
  * Represents the restriction for string data type.
  */
-public class YangStringRestriction {
+public class YangStringRestriction implements YangDesc, YangReference, YangAppErrorInfo, Parsable {
 
     /*-
      * Reference RFC 6020.
@@ -77,6 +80,26 @@
     private YangPatternRestriction patternRestriction;
 
     /**
+     * Textual reference.
+     */
+    private String reference;
+
+    /**
+     * Application's error message, to be used for data error.
+     */
+    private String errorMessage;
+
+    /**
+     * Application's error tag, to be filled in data validation error response.
+     */
+    private String errorAppTag;
+
+    /**
+     * Textual description.
+     */
+    private String description;
+
+    /**
      * Creates a YANG string restriction object.
      */
     public YangStringRestriction() {
@@ -129,4 +152,101 @@
         }
         getPatternRestriction().addPattern(newPattern);
     }
+
+    /**
+     * Returns the textual reference of the string restriction.
+     *
+     * @return textual reference of the string restriction
+     */
+    @Override
+    public String getReference() {
+        return reference;
+    }
+
+    /**
+     * Sets the textual reference of the string restriction.
+     *
+     * @param ref textual reference of the string restriction
+     */
+    @Override
+    public void setReference(String ref) {
+        reference = ref;
+    }
+
+    /**
+     * Returns the description of the string restriction.
+     *
+     * @return description of the string restriction
+     */
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * Sets the description of the string restriction.
+     *
+     * @param desc description of the string restriction
+     */
+    @Override
+    public void setDescription(String desc) {
+        description = desc;
+
+    }
+
+    /**
+     * Returns application's error message, to be used for data error.
+     *
+     * @return Application's error message, to be used for data error
+     */
+    @Override
+    public String getGetErrorMessage() {
+        return errorMessage;
+    }
+
+    /**
+     * Sets Application's error message, to be used for data error.
+     *
+     * @param errMsg Application's error message, to be used for data error
+     */
+    @Override
+    public void setErrorMessage(String errMsg) {
+        errorMessage = errMsg;
+
+    }
+
+    /**
+     * Returns application's error tag, to be used for data error.
+     *
+     * @return application's error tag, to be used for data error
+     */
+    @Override
+    public String getGetErrorAppTag() {
+        return errorAppTag;
+    }
+
+    /**
+     * Sets application's error tag, to be used for data error.
+     *
+     * @param errTag application's error tag, to be used for data error.
+     */
+    @Override
+    public void setErrorAppTag(String errTag) {
+        errorAppTag = errTag;
+    }
+
+    @Override
+    public YangConstructType getYangConstructType() {
+        return YangConstructType.PATTERN_DATA;
+    }
+
+    @Override
+    public void validateDataOnEntry() throws DataModelException {
+        //TODO: implement the method.
+    }
+
+    @Override
+    public void validateDataOnExit() throws DataModelException {
+        //TODO: implement the method.
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
index eda18f3..e243d5e 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.yangutils.datamodel.utils;
 
+import java.util.Iterator;
 import java.util.List;
 
 import org.onosproject.yangutils.datamodel.CollisionDetector;
@@ -29,6 +30,7 @@
 import org.onosproject.yangutils.datamodel.YangRpc;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.parser.Parsable;
+import org.onosproject.yangutils.plugin.manager.YangFileInfo;
 import org.onosproject.yangutils.utils.YangConstructType;
 
 /**
@@ -240,4 +242,26 @@
         }
         return false;
     }
+
+    /**
+     * Returns module's data model node to which sub-module belongs to.
+     *
+     * @param yangFileInfo YANG file information
+     * @param belongsToModuleName name of the module to which sub-module belongs to
+     * @return module node to which sub-module belongs to
+     * @throws DataModelException when belongs to module node is not found
+     */
+    public static YangNode findBelongsToModuleNode(List<YangFileInfo> yangFileInfo,
+                String belongsToModuleName) throws DataModelException {
+        Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
+        while (yangFileIterator.hasNext()) {
+            YangFileInfo yangFile = yangFileIterator.next();
+            YangNode yangNode = yangFile.getRootNode();
+            if (yangNode.getName().equals(belongsToModuleName)) {
+                return yangNode;
+            }
+        }
+        throw new DataModelException("YANG file error : Module " + belongsToModuleName + " to which sub-module " +
+                "belongs to is not found.");
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java
index 14c07b7..c4c52f0 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java
@@ -27,7 +27,7 @@
 public interface GeneratedYangListener extends ParseTreeListener {
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * yangfile.
      *
      * @param currentContext current context in the parsed tree
@@ -35,7 +35,7 @@
     void enterYangfile(GeneratedYangParser.YangfileContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * yangfile.
      *
      * @param currentContext current context in the parsed tree
@@ -43,7 +43,7 @@
     void exitYangfile(GeneratedYangParser.YangfileContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * moduleStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -51,7 +51,7 @@
     void enterModuleStatement(GeneratedYangParser.ModuleStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * moduleStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -59,7 +59,7 @@
     void exitModuleStatement(GeneratedYangParser.ModuleStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * moduleBody.
      *
      * @param currentContext current context in the parsed tree
@@ -67,7 +67,7 @@
     void enterModuleBody(GeneratedYangParser.ModuleBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * moduleBody.
      *
      * @param currentContext current context in the parsed tree
@@ -75,7 +75,7 @@
     void exitModuleBody(GeneratedYangParser.ModuleBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * moduleHeaderStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -83,7 +83,7 @@
     void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * moduleHeaderStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -91,7 +91,7 @@
     void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * linkageStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -99,7 +99,7 @@
     void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * linkageStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -107,7 +107,7 @@
     void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * metaStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -115,7 +115,7 @@
     void enterMetaStatements(GeneratedYangParser.MetaStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * metaStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -123,7 +123,7 @@
     void exitMetaStatements(GeneratedYangParser.MetaStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -131,7 +131,7 @@
     void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -139,7 +139,7 @@
     void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * bodyStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -147,7 +147,7 @@
     void enterBodyStatements(GeneratedYangParser.BodyStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * bodyStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -155,7 +155,7 @@
     void exitBodyStatements(GeneratedYangParser.BodyStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * yangVersionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -163,7 +163,7 @@
     void enterYangVersionStatement(GeneratedYangParser.YangVersionStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * yangVersionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -171,7 +171,7 @@
     void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * namespaceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -179,7 +179,7 @@
     void enterNamespaceStatement(GeneratedYangParser.NamespaceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * namespaceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -187,7 +187,7 @@
     void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * prefixStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -195,7 +195,7 @@
     void enterPrefixStatement(GeneratedYangParser.PrefixStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * prefixStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -203,7 +203,7 @@
     void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * importStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -211,7 +211,7 @@
     void enterImportStatement(GeneratedYangParser.ImportStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * importStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -219,7 +219,7 @@
     void exitImportStatement(GeneratedYangParser.ImportStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * importStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -227,7 +227,7 @@
     void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * importStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -235,7 +235,7 @@
     void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * revisionDateStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -243,7 +243,7 @@
     void enterRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * revisionDateStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -251,7 +251,7 @@
     void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * includeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -259,7 +259,7 @@
     void enterIncludeStatement(GeneratedYangParser.IncludeStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * includeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -267,7 +267,7 @@
     void exitIncludeStatement(GeneratedYangParser.IncludeStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * organizationStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -275,7 +275,7 @@
     void enterOrganizationStatement(GeneratedYangParser.OrganizationStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * organizationStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -283,7 +283,7 @@
     void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * contactStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -291,7 +291,7 @@
     void enterContactStatement(GeneratedYangParser.ContactStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * contactStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -299,7 +299,7 @@
     void exitContactStatement(GeneratedYangParser.ContactStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * descriptionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -307,7 +307,7 @@
     void enterDescriptionStatement(GeneratedYangParser.DescriptionStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * descriptionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -315,7 +315,7 @@
     void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * referenceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -323,7 +323,7 @@
     void enterReferenceStatement(GeneratedYangParser.ReferenceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * referenceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -331,7 +331,7 @@
     void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -339,7 +339,7 @@
     void enterRevisionStatement(GeneratedYangParser.RevisionStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -347,7 +347,7 @@
     void exitRevisionStatement(GeneratedYangParser.RevisionStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -355,7 +355,7 @@
     void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * revisionStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -363,7 +363,7 @@
     void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * subModuleStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -371,7 +371,7 @@
     void enterSubModuleStatement(GeneratedYangParser.SubModuleStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * subModuleStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -379,7 +379,7 @@
     void exitSubModuleStatement(GeneratedYangParser.SubModuleStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * submoduleBody.
      *
      * @param currentContext current context in the parsed tree
@@ -387,7 +387,7 @@
     void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * submoduleBody.
      *
      * @param currentContext current context in the parsed tree
@@ -395,7 +395,7 @@
     void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * submoduleHeaderStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -403,7 +403,7 @@
     void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * submoduleHeaderStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -411,7 +411,7 @@
     void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * belongstoStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -419,7 +419,7 @@
     void enterBelongstoStatement(GeneratedYangParser.BelongstoStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * belongstoStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -427,7 +427,7 @@
     void exitBelongstoStatement(GeneratedYangParser.BelongstoStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * belongstoStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -435,7 +435,7 @@
     void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * belongstoStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -443,7 +443,7 @@
     void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * extensionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -451,7 +451,7 @@
     void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * extensionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -459,7 +459,7 @@
     void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * extensionBody.
      *
      * @param currentContext current context in the parsed tree
@@ -467,7 +467,7 @@
     void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * extensionBody.
      *
      * @param currentContext current context in the parsed tree
@@ -475,7 +475,7 @@
     void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * argumentStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -483,7 +483,7 @@
     void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * argumentStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -491,7 +491,7 @@
     void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * argumentBody.
      *
      * @param currentContext current context in the parsed tree
@@ -499,7 +499,7 @@
     void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * argumentBody.
      *
      * @param currentContext current context in the parsed tree
@@ -507,7 +507,7 @@
     void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * yinElementStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -515,7 +515,7 @@
     void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * yinElementStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -523,7 +523,7 @@
     void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * identityStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -531,7 +531,7 @@
     void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * identityStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -539,7 +539,7 @@
     void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * identityBody.
      *
      * @param currentContext current context in the parsed tree
@@ -547,7 +547,7 @@
     void enterIdentityBody(GeneratedYangParser.IdentityBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * identityBody.
      *
      * @param currentContext current context in the parsed tree
@@ -555,7 +555,7 @@
     void exitIdentityBody(GeneratedYangParser.IdentityBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * baseStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -563,7 +563,7 @@
     void enterBaseStatement(GeneratedYangParser.BaseStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * baseStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -571,7 +571,7 @@
     void exitBaseStatement(GeneratedYangParser.BaseStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * featureStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -579,7 +579,7 @@
     void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * featureStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -587,7 +587,7 @@
     void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * featureBody.
      *
      * @param currentContext current context in the parsed tree
@@ -595,7 +595,7 @@
     void enterFeatureBody(GeneratedYangParser.FeatureBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * featureBody.
      *
      * @param currentContext current context in the parsed tree
@@ -603,7 +603,7 @@
     void exitFeatureBody(GeneratedYangParser.FeatureBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * dataDefStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -611,7 +611,7 @@
     void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * dataDefStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -619,7 +619,7 @@
     void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * ifFeatureStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -627,7 +627,7 @@
     void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * ifFeatureStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -635,7 +635,7 @@
     void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * unitsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -643,7 +643,7 @@
     void enterUnitsStatement(GeneratedYangParser.UnitsStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * unitsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -651,7 +651,7 @@
     void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * typedefStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -659,7 +659,7 @@
     void enterTypedefStatement(GeneratedYangParser.TypedefStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * typedefStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -667,7 +667,7 @@
     void exitTypedefStatement(GeneratedYangParser.TypedefStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * typeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -675,7 +675,7 @@
     void enterTypeStatement(GeneratedYangParser.TypeStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * typeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -683,7 +683,7 @@
     void exitTypeStatement(GeneratedYangParser.TypeStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * typeBodyStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -691,7 +691,7 @@
     void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * typeBodyStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -699,7 +699,23 @@
     void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
+     * numericalRestrictions.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext currentContext);
+
+    /**
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
+     * numericalRestrictions.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext currentContext);
+
+    /**
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * numericalRestrictions.
      *
      * @param currentContext current context in the parsed tree
@@ -707,7 +723,7 @@
     void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * numericalRestrictions.
      *
      * @param currentContext current context in the parsed tree
@@ -715,7 +731,7 @@
     void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * rangeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -723,7 +739,7 @@
     void enterRangeStatement(GeneratedYangParser.RangeStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * rangeStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -731,7 +747,7 @@
     void exitRangeStatement(GeneratedYangParser.RangeStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * commonStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -739,7 +755,7 @@
     void enterCommonStatements(GeneratedYangParser.CommonStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * commonStatements.
      *
      * @param currentContext current context in the parsed tree
@@ -747,7 +763,7 @@
     void exitCommonStatements(GeneratedYangParser.CommonStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * stringRestrictions.
      *
      * @param currentContext current context in the parsed tree
@@ -755,7 +771,7 @@
     void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * stringRestrictions.
      *
      * @param currentContext current context in the parsed tree
@@ -763,7 +779,7 @@
     void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * lengthStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -771,7 +787,7 @@
     void enterLengthStatement(GeneratedYangParser.LengthStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * lengthStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -779,7 +795,7 @@
     void exitLengthStatement(GeneratedYangParser.LengthStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * patternStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -787,7 +803,7 @@
     void enterPatternStatement(GeneratedYangParser.PatternStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * patternStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -795,7 +811,7 @@
     void exitPatternStatement(GeneratedYangParser.PatternStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * defaultStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -803,7 +819,7 @@
     void enterDefaultStatement(GeneratedYangParser.DefaultStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * defaultStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -811,7 +827,7 @@
     void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * enumSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -819,7 +835,7 @@
     void enterEnumSpecification(GeneratedYangParser.EnumSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * enumSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -827,7 +843,7 @@
     void exitEnumSpecification(GeneratedYangParser.EnumSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * enumStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -835,7 +851,7 @@
     void enterEnumStatement(GeneratedYangParser.EnumStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * enumStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -843,7 +859,7 @@
     void exitEnumStatement(GeneratedYangParser.EnumStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * enumStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -851,7 +867,7 @@
     void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * enumStatementBody.
      *
      * @param currentContext current context in the parsed tree
@@ -859,7 +875,7 @@
     void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * leafrefSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -867,7 +883,7 @@
     void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * leafrefSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -875,7 +891,7 @@
     void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * pathStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -883,7 +899,7 @@
     void enterPathStatement(GeneratedYangParser.PathStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * pathStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -891,7 +907,7 @@
     void exitPathStatement(GeneratedYangParser.PathStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * requireInstanceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -899,7 +915,7 @@
     void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * requireInstanceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -907,7 +923,7 @@
     void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * instanceIdentifierSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -916,7 +932,7 @@
             GeneratedYangParser.InstanceIdentifierSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * instanceIdentifierSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -924,7 +940,7 @@
     void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * identityrefSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -932,7 +948,7 @@
     void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * identityrefSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -940,7 +956,7 @@
     void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * unionSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -948,7 +964,7 @@
     void enterUnionSpecification(GeneratedYangParser.UnionSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * unionSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -956,7 +972,7 @@
     void exitUnionSpecification(GeneratedYangParser.UnionSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * bitsSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -964,7 +980,7 @@
     void enterBitsSpecification(GeneratedYangParser.BitsSpecificationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * bitsSpecification.
      *
      * @param currentContext current context in the parsed tree
@@ -972,7 +988,7 @@
     void exitBitsSpecification(GeneratedYangParser.BitsSpecificationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * bitStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -980,7 +996,7 @@
     void enterBitStatement(GeneratedYangParser.BitStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * bitStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -988,7 +1004,7 @@
     void exitBitStatement(GeneratedYangParser.BitStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * bitBodyStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -996,7 +1012,7 @@
     void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * bitBodyStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1004,7 +1020,7 @@
     void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * positionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1012,7 +1028,7 @@
     void enterPositionStatement(GeneratedYangParser.PositionStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * positionStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1020,7 +1036,7 @@
     void exitPositionStatement(GeneratedYangParser.PositionStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * statusStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1028,7 +1044,7 @@
     void enterStatusStatement(GeneratedYangParser.StatusStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * statusStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1036,7 +1052,7 @@
     void exitStatusStatement(GeneratedYangParser.StatusStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * configStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1044,7 +1060,7 @@
     void enterConfigStatement(GeneratedYangParser.ConfigStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * configStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1052,7 +1068,7 @@
     void exitConfigStatement(GeneratedYangParser.ConfigStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * mandatoryStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1060,7 +1076,7 @@
     void enterMandatoryStatement(GeneratedYangParser.MandatoryStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * mandatoryStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1068,7 +1084,7 @@
     void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * presenceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1076,7 +1092,7 @@
     void enterPresenceStatement(GeneratedYangParser.PresenceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * presenceStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1084,7 +1100,7 @@
     void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * orderedByStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1092,7 +1108,7 @@
     void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * orderedByStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1100,7 +1116,7 @@
     void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * mustStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1108,7 +1124,7 @@
     void enterMustStatement(GeneratedYangParser.MustStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * mustStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1116,7 +1132,7 @@
     void exitMustStatement(GeneratedYangParser.MustStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * errorMessageStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1124,7 +1140,7 @@
     void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * errorMessageStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1132,7 +1148,7 @@
     void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * errorAppTagStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1140,7 +1156,7 @@
     void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * errorAppTagStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1148,7 +1164,7 @@
     void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * minElementsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1156,7 +1172,7 @@
     void enterMinElementsStatement(GeneratedYangParser.MinElementsStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * minElementsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1164,7 +1180,7 @@
     void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * maxElementsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1172,7 +1188,7 @@
     void enterMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * maxElementsStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1180,7 +1196,7 @@
     void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * valueStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1188,7 +1204,7 @@
     void enterValueStatement(GeneratedYangParser.ValueStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * valueStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1196,7 +1212,7 @@
     void exitValueStatement(GeneratedYangParser.ValueStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * groupingStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1204,7 +1220,7 @@
     void enterGroupingStatement(GeneratedYangParser.GroupingStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * groupingStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1212,7 +1228,7 @@
     void exitGroupingStatement(GeneratedYangParser.GroupingStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * containerStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1220,7 +1236,7 @@
     void enterContainerStatement(GeneratedYangParser.ContainerStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * containerStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1228,7 +1244,7 @@
     void exitContainerStatement(GeneratedYangParser.ContainerStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * leafStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1236,7 +1252,7 @@
     void enterLeafStatement(GeneratedYangParser.LeafStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * leafStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1244,7 +1260,7 @@
     void exitLeafStatement(GeneratedYangParser.LeafStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * leafListStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1252,7 +1268,7 @@
     void enterLeafListStatement(GeneratedYangParser.LeafListStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * leafListStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1260,7 +1276,7 @@
     void exitLeafListStatement(GeneratedYangParser.LeafListStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * listStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1268,7 +1284,7 @@
     void enterListStatement(GeneratedYangParser.ListStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * listStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1276,7 +1292,7 @@
     void exitListStatement(GeneratedYangParser.ListStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * keyStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1284,7 +1300,7 @@
     void enterKeyStatement(GeneratedYangParser.KeyStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule
      * keyStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1292,7 +1308,7 @@
     void exitKeyStatement(GeneratedYangParser.KeyStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule
      * uniqueStatement.
      *
      * @param currentContext current context in the parsed tree
@@ -1300,650 +1316,651 @@
     void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * uniqueStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule uniqueStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * choiceStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterChoiceStatement(GeneratedYangParser.ChoiceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * choiceStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitChoiceStatement(GeneratedYangParser.ChoiceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * shortCaseStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * shortCaseStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * caseStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterCaseStatement(GeneratedYangParser.CaseStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * caseStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitCaseStatement(GeneratedYangParser.CaseStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * usesStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext currentContext);
+
+    /**
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext currentContext);
+
+    /**
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterUsesStatement(GeneratedYangParser.UsesStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * usesStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitUsesStatement(GeneratedYangParser.UsesStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineStatement(GeneratedYangParser.RefineStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineStatement(GeneratedYangParser.RefineStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineContainerStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineContainerStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineLeafStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineLeafStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineLeafListStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineLeafListStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineListStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineListStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineChoiceStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineChoiceStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * refineCaseStatements.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * refineCaseStatements.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * usesAugmentStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
      *
      * @param currentContext current context in the parsed tree
      */
-    void enterUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext currentContext);
+    void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * usesAugmentStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
      *
      * @param currentContext current context in the parsed tree
      */
-    void exitUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext currentContext);
+    void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * augmentStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterAugmentStatement(GeneratedYangParser.AugmentStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * augmentStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitAugmentStatement(GeneratedYangParser.AugmentStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * whenStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterWhenStatement(GeneratedYangParser.WhenStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * whenStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitWhenStatement(GeneratedYangParser.WhenStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * rpcStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRpcStatement(GeneratedYangParser.RpcStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * rpcStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRpcStatement(GeneratedYangParser.RpcStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * inputStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterInputStatement(GeneratedYangParser.InputStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * inputStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitInputStatement(GeneratedYangParser.InputStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * outputStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterOutputStatement(GeneratedYangParser.OutputStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * outputStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitOutputStatement(GeneratedYangParser.OutputStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * notificationStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterNotificationStatement(GeneratedYangParser.NotificationStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * notificationStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitNotificationStatement(GeneratedYangParser.NotificationStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * deviationStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * deviationStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule
-     * deviateNotSupportedStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule
-     * deviateNotSupportedStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule string.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule string.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterString(GeneratedYangParser.StringContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule string.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule string.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitString(GeneratedYangParser.StringContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule identifier.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule identifier.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterIdentifier(GeneratedYangParser.IdentifierContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule identifier.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule identifier.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitIdentifier(GeneratedYangParser.IdentifierContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule version.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule version.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterVersion(GeneratedYangParser.VersionContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule version.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule version.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitVersion(GeneratedYangParser.VersionContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule range.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule range.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRange(GeneratedYangParser.RangeContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule range.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule range.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRange(GeneratedYangParser.RangeContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule length.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule length.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterLength(GeneratedYangParser.LengthContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule length.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule length.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitLength(GeneratedYangParser.LengthContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule path.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule path.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterPath(GeneratedYangParser.PathContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule path.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule path.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitPath(GeneratedYangParser.PathContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule position.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule position.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterPosition(GeneratedYangParser.PositionContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule position.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule position.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitPosition(GeneratedYangParser.PositionContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule status.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule status.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterStatus(GeneratedYangParser.StatusContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule status.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule status.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitStatus(GeneratedYangParser.StatusContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule config.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule config.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterConfig(GeneratedYangParser.ConfigContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule config.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule config.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitConfig(GeneratedYangParser.ConfigContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule mandatory.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule mandatory.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterMandatory(GeneratedYangParser.MandatoryContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule mandatory.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule mandatory.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitMandatory(GeneratedYangParser.MandatoryContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterOrderedBy(GeneratedYangParser.OrderedByContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitOrderedBy(GeneratedYangParser.OrderedByContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule min elements value.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule min elements value.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterMinValue(GeneratedYangParser.MinValueContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule min elements value.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule min elements value.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitMinValue(GeneratedYangParser.MinValueContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule  max elements value.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule  max elements value.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterMaxValue(GeneratedYangParser.MaxValueContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule max elements value.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule max elements value.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitMaxValue(GeneratedYangParser.MaxValueContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule key.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule key.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterKey(GeneratedYangParser.KeyContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule key.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule key.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitKey(GeneratedYangParser.KeyContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule unique.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule unique.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterUnique(GeneratedYangParser.UniqueContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule unique.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule unique.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitUnique(GeneratedYangParser.UniqueContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule refine.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule refine.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterRefine(GeneratedYangParser.RefineContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule refine.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule refine.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitRefine(GeneratedYangParser.RefineContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule augment.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterAugment(GeneratedYangParser.AugmentContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule augment.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitAugment(GeneratedYangParser.AugmentContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule deviation.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void enterFraction(GeneratedYangParser.FractionContext currentContext);
+
+    /**
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void exitFraction(GeneratedYangParser.FractionContext currentContext);
+
+    /**
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterDeviation(GeneratedYangParser.DeviationContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule deviation.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
      *
      * @param currentContext current context in the parsed tree
      */
     void exitDeviation(GeneratedYangParser.DeviationContext currentContext);
 
     /**
-     * Enter a parse tree produced by GeneratedYangParser for grammar rule yang construct.
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void enterValue(GeneratedYangParser.ValueContext currentContext);
+
+    /**
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
+     *
+     * @param currentContext current context in the parsed tree
+     */
+    void exitValue(GeneratedYangParser.ValueContext currentContext);
+
+    /**
+     * Enters a parse tree produced by GeneratedYangParser for grammar rule yang construct.
      *
      * @param currentContext current context in the parsed tree
      */
     void enterYangConstruct(GeneratedYangParser.YangConstructContext currentContext);
 
     /**
-     * Exit a parse tree produced by GeneratedYangParser for grammar rule yang construct.
+     * Exits a parse tree produced by GeneratedYangParser for grammar rule yang construct.
      *
      * @param currentContext current context in the parsed tree
      */
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
index 5c03e54..370b56c 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
@@ -75,6 +75,11 @@
 import org.onosproject.yangutils.parser.impl.listeners.UsesListener;
 import org.onosproject.yangutils.parser.impl.listeners.ValueListener;
 import org.onosproject.yangutils.parser.impl.listeners.VersionListener;
+import org.onosproject.yangutils.utils.YangConstructType;
+
+import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT;
+import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct;
 
 /**
  * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events
@@ -148,62 +153,62 @@
 
     @Override
     public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -213,7 +218,7 @@
 
     @Override
     public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -223,7 +228,7 @@
 
     @Override
     public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -233,7 +238,7 @@
 
     @Override
     public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -248,12 +253,12 @@
 
     @Override
     public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -263,7 +268,7 @@
 
     @Override
     public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -283,7 +288,7 @@
 
     @Override
     public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -293,7 +298,7 @@
 
     @Override
     public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -303,7 +308,7 @@
 
     @Override
     public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -313,7 +318,7 @@
 
     @Override
     public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -328,12 +333,12 @@
 
     @Override
     public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -348,22 +353,22 @@
 
     @Override
     public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -378,132 +383,132 @@
 
     @Override
     public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.EXTENSION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
     }
 
     @Override
     public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing
     }
 
     @Override
     public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.IDENTITY_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.BASE_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.FEATURE_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
-        // TODO: implement the method.
+        //TODO: to be implemented
     }
 
     @Override
     public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
-        // TODO: implement the method.
+        //TODO : to be implemented
     }
 
     @Override
     public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
-        // TODO: implement the method.
+        //TODO : to be implemented
     }
 
     @Override
     public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
     public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
@@ -513,7 +518,7 @@
 
     @Override
     public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -538,22 +543,32 @@
 
     @Override
     public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
+        // do nothing.
+    }
+
+    @Override
+    public void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
+        // TODO: implement the method.
+    }
+
+    @Override
+    public void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
         // TODO: implement the method.
     }
 
     @Override
     public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -563,27 +578,27 @@
 
     @Override
     public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
-        // TODO: implement the method.
+        RangeRestrictionListener.processRangeRestrictionExit(this, ctx);
     }
 
     @Override
     public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -593,7 +608,7 @@
 
     @Override
     public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
-        // TODO: implement the method.
+        LengthRestrictionListener.processLengthRestrictionExit(this, ctx);
     }
 
     @Override
@@ -603,7 +618,7 @@
 
     @Override
     public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
-        // TODO: implement the method.
+        PatternRestrictionListener.processPatternRestrictionExit(this, ctx);
     }
 
     @Override
@@ -613,7 +628,7 @@
 
     @Override
     public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -638,62 +653,62 @@
 
     @Override
     public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.PATH_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.REQUIRE_INSTANCE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
     }
 
     @Override
     public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -728,12 +743,12 @@
 
     @Override
     public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -743,7 +758,7 @@
 
     @Override
     public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -753,7 +768,7 @@
 
     @Override
     public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -763,7 +778,7 @@
 
     @Override
     public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -773,7 +788,7 @@
 
     @Override
     public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -783,47 +798,47 @@
 
     @Override
     public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.ORDERED_BY_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
     public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
     public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.ERROR_MESSAGE_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.ERROR_APP_TAG_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
-        // TODO: implement the method.
+        //do nothing
     }
 
     @Override
@@ -833,7 +848,7 @@
 
     @Override
     public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -843,7 +858,7 @@
 
     @Override
     public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -853,7 +868,7 @@
 
     @Override
     public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -913,17 +928,17 @@
 
     @Override
     public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.UNIQUE_DATA, ctx, CURRENTLY_UNSUPPORTED);
     }
 
     @Override
     public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
@@ -957,6 +972,16 @@
     }
 
     @Override
+    public void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
+        handleUnsupportedYangConstruct(YangConstructType.ANYXML_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
+    }
+
+    @Override
+    public void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
+        // do nothing.
+    }
+
+    @Override
     public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
         UsesListener.processUsesEntry(this, ctx);
     }
@@ -968,82 +993,82 @@
 
     @Override
     public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.REFINE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
     }
 
     @Override
     public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
-    public void enterUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
-        // TODO: implement the method.
+    public void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
+        // do nothing.
     }
 
     @Override
-    public void exitUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
-        // TODO: implement the method.
+    public void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
+        // do nothing.
     }
 
     @Override
@@ -1058,12 +1083,12 @@
 
     @Override
     public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
     public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
-        // TODO: implement the method.
+        // TODO: to be implemented
     }
 
     @Override
@@ -1108,271 +1133,291 @@
 
     @Override
     public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
-        // TODO: implement the method.
+        handleUnsupportedYangConstruct(YangConstructType.DEVIATION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
     }
 
     @Override
     public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterString(GeneratedYangParser.StringContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitString(GeneratedYangParser.StringContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRange(GeneratedYangParser.RangeContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRange(GeneratedYangParser.RangeContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterLength(GeneratedYangParser.LengthContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitLength(GeneratedYangParser.LengthContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterPath(GeneratedYangParser.PathContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitPath(GeneratedYangParser.PathContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterPosition(GeneratedYangParser.PositionContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitPosition(GeneratedYangParser.PositionContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterStatus(GeneratedYangParser.StatusContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitStatus(GeneratedYangParser.StatusContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterConfig(GeneratedYangParser.ConfigContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitConfig(GeneratedYangParser.ConfigContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterMandatory(GeneratedYangParser.MandatoryContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitMandatory(GeneratedYangParser.MandatoryContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterMinValue(GeneratedYangParser.MinValueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitMinValue(GeneratedYangParser.MinValueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterMaxValue(GeneratedYangParser.MaxValueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitMaxValue(GeneratedYangParser.MaxValueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterKey(GeneratedYangParser.KeyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitKey(GeneratedYangParser.KeyContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterUnique(GeneratedYangParser.UniqueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitUnique(GeneratedYangParser.UniqueContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterRefine(GeneratedYangParser.RefineContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitRefine(GeneratedYangParser.RefineContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterAugment(GeneratedYangParser.AugmentContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitAugment(GeneratedYangParser.AugmentContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterDeviation(GeneratedYangParser.DeviationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitDeviation(GeneratedYangParser.DeviationContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterVersion(GeneratedYangParser.VersionContext ctx) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitVersion(GeneratedYangParser.VersionContext ctx) {
+        // do nothing.
+    }
+
+    @Override
+    public void enterValue(GeneratedYangParser.ValueContext ctx) {
+        // do nothing.
+    }
+
+    @Override
+    public void exitValue(GeneratedYangParser.ValueContext ctx) {
+        // do nothing.
+    }
+
+    @Override
+    public void enterFraction(GeneratedYangParser.FractionContext ctx) {
+        // TODO: implement the method.
+    }
+
+    @Override
+    public void exitFraction(GeneratedYangParser.FractionContext ctx) {
         // TODO: implement the method.
     }
 
     @Override
     public void visitTerminal(TerminalNode terminalNode) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void visitErrorNode(ErrorNode errorNode) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void enterEveryRule(ParserRuleContext parserRuleContext) {
-        // TODO: implement the method.
+        // do nothing.
     }
 
     @Override
     public void exitEveryRule(ParserRuleContext parserRuleContext) {
-        // TODO: implement the method.
+        // do nothing.
     }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
index 643499f..72bd97a 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
@@ -26,6 +26,7 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
 import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.YangSubModule;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.parser.Parsable;
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -133,12 +134,11 @@
         }
 
         Parsable curData = listener.getParsedDataStack().peek();
-        if (curData instanceof YangModule || curData instanceof YangContainer
-                || curData instanceof YangList || curData instanceof YangCase
-                || curData instanceof YangNotification
+        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) {
+                || curData instanceof YangAugment || curData instanceof YangGrouping) {
             YangNode curNode = (YangNode) curData;
             try {
                 curNode.addChild(container);
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
index fc9b84a..a4511bc 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
@@ -39,6 +39,8 @@
  * defaultStatement : DEFAULT_KEYWORD string STMTEND;
  */
 
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangLeaf;
 import org.onosproject.yangutils.datamodel.YangTypeDef;
 import org.onosproject.yangutils.parser.Parsable;
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -83,6 +85,16 @@
                 typeDef.setDefaultValueInString(ctx.string().getText());
                 break;
             }
+            case LEAF_DATA: {
+                YangLeaf leaf = (YangLeaf) tmpNode;
+                leaf.setDefaultValueInString(ctx.string().getText());
+                break;
+            }
+            case CHOICE_DATA: {
+                YangChoice choice = (YangChoice) tmpNode;
+                choice.setDefaultValueInString(ctx.string().getText());
+                break;
+            }
             default:
                 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
                         DEFAULT_DATA, ctx.string().getText(), ENTRY));
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
index 08edab1..e0a51df 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
@@ -146,7 +146,14 @@
                         boolean isValuePresent = false;
 
                         for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
-                            if (maxValue <= curEnum.getValue()) {
+                            if (curEnum.getValue() == Integer.MAX_VALUE) {
+                                ParserException parserException = new ParserException("YANG file error : "
+                                        + "An enum value MUST be specified for enum substatements following the one"
+                                        + "with the current highest value");
+                                parserException.setLine(ctx.getStart().getLine());
+                                parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+                                throw parserException;
+                            } else if (maxValue <= curEnum.getValue()) {
                                 maxValue = curEnum.getValue();
                                 isValuePresent = true;
                             }
@@ -161,8 +168,8 @@
                     } catch (DataModelException e) {
                         ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
                                 DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage()));
-                        parserException.setLine(ctx.string().STRING(0).getSymbol().getLine());
-                        parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine());
+                        parserException.setLine(ctx.getStart().getLine());
+                        parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
                         throw parserException;
                     }
                     break;
@@ -173,8 +180,7 @@
             }
         } else {
             throw new ParserException(
-                    constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(),
-                            EXIT));
+                    constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
         }
     }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
index 03fc737..2f1d7fe 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
@@ -29,8 +29,10 @@
 
 import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction;
@@ -86,7 +88,7 @@
         Parsable tmpData = listener.getParsedDataStack().peek();
         if (tmpData.getYangConstructType() == TYPE_DATA) {
             YangType type = (YangType) tmpData;
-            setLengthRestriction(type, ctx);
+            setLengthRestriction(listener, type, ctx);
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA,
                     ctx.length().getText(), ENTRY));
@@ -96,10 +98,11 @@
     /**
      * Sets the length restriction to type.
      *
+     * @param listener listener's object
      * @param type Yang type for which length restriction to be set
      * @param ctx  context object of the grammar rule
      */
-    private static void setLengthRestriction(YangType type,
+    private static void setLengthRestriction(TreeWalkListener listener, YangType type,
                                              GeneratedYangParser.LengthStatementContext ctx) {
 
         if (type.getDataType() == DERIVED) {
@@ -132,5 +135,31 @@
         }
 
         stringRestriction.setLengthRestriction(lengthRestriction);
+        listener.getParsedDataStack().push(lengthRestriction);
+    }
+
+    /**
+     * Performs validation and updates the data model tree.
+     * It is called when parser exits from grammar rule (length).
+     *
+     * @param listener listener's object
+     * @param ctx context object of the grammar rule
+     */
+    public static void processLengthRestrictionExit(TreeWalkListener listener,
+                                                   GeneratedYangParser.LengthStatementContext ctx) {
+
+        // Check for stack to be non empty.
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), EXIT);
+
+        Parsable tmpData = listener.getParsedDataStack().peek();
+        if (tmpData instanceof YangRangeRestriction) {
+            listener.getParsedDataStack().pop();
+        } else if (tmpData instanceof YangType
+                && ((YangType) tmpData).getDataType() == DERIVED) {
+            // TODO : need to handle in linker
+        } else {
+            throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LENGTH_DATA,
+                    ctx.length().getText(), EXIT));
+        }
     }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
index 42326b7..1f4ab50 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
@@ -26,6 +26,7 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangNotification;
 import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.YangSubModule;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.parser.Parsable;
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -141,7 +142,8 @@
         if (curData instanceof YangModule || curData instanceof YangContainer
                 || curData instanceof YangList || curData instanceof YangCase
                 || curData instanceof YangNotification || curData instanceof YangInput
-                || curData instanceof YangOutput || curData instanceof YangAugment || curData instanceof YangGrouping) {
+                || curData instanceof YangOutput || curData instanceof YangAugment
+                || curData instanceof YangGrouping || curData instanceof YangSubModule) {
             curNode = (YangNode) curData;
             try {
                 curNode.addChild(yangList);
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
index 3c1fd5a..ca36525 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
@@ -27,9 +27,12 @@
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
 import org.onosproject.yangutils.utils.YangConstructType;
 
+import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA;
@@ -84,7 +87,7 @@
         Parsable tmpData = listener.getParsedDataStack().peek();
         if (tmpData.getYangConstructType() == TYPE_DATA) {
             YangType type = (YangType) tmpData;
-            setPatternRestriction(type, ctx);
+            setPatternRestriction(listener, type, ctx);
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA,
                     ctx.string().getText(), ENTRY));
@@ -94,10 +97,11 @@
     /**
      * Sets the pattern restriction to type.
      *
+     * @param listener listener's object
      * @param type Yang type for which pattern restriction to be set
      * @param ctx  context object of the grammar rule
      */
-    private static void setPatternRestriction(YangType type,
+    private static void setPatternRestriction(TreeWalkListener listener, YangType type,
                                               GeneratedYangParser.PatternStatementContext ctx) {
 
         if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) {
@@ -121,6 +125,7 @@
             } else {
                 stringRestriction.addPattern(patternArgument);
             }
+            listener.getParsedDataStack().push(stringRestriction);
         } else {
             YangPatternRestriction patternRestriction = (YangPatternRestriction) ((YangDerivedInfo<?>) type
                     .getDataTypeExtendedInfo()).getPatternRestriction();
@@ -134,4 +139,29 @@
             }
         }
     }
+
+    /**
+     * Performs validation and updates the data model tree.
+     * It is called when parser exits from grammar rule (pattern).
+     *
+     * @param listener listener's object
+     * @param ctx context object of the grammar rule
+     */
+    public static void processPatternRestrictionExit(TreeWalkListener listener,
+                                                    GeneratedYangParser.PatternStatementContext ctx) {
+
+        // Check for stack to be non empty.
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), EXIT);
+
+        Parsable tmpData = listener.getParsedDataStack().peek();
+        if (tmpData instanceof YangStringRestriction) {
+            listener.getParsedDataStack().pop();
+        } else if (tmpData instanceof YangType
+                && ((YangType) tmpData).getDataType() == DERIVED) {
+            // TODO : need to handle in linker
+        } else {
+            throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, PATTERN_DATA,
+                    ctx.string().getText(), EXIT));
+        }
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
index b6e0cf6..b0387ae 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
@@ -26,8 +26,10 @@
 
 import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType;
@@ -82,7 +84,7 @@
         Parsable tmpData = listener.getParsedDataStack().peek();
         if (tmpData.getYangConstructType() == TYPE_DATA) {
             YangType type = (YangType) tmpData;
-            setRangeRestriction(type, ctx);
+            setRangeRestriction(listener, type, ctx);
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA,
                     ctx.range().getText(), ENTRY));
@@ -92,10 +94,11 @@
     /**
      * Sets the range restriction to type.
      *
+     * @param listener listener's object
      * @param type YANG type for which range restriction to be added
      * @param ctx  context object of the grammar rule
      */
-    private static void setRangeRestriction(YangType type,
+    private static void setRangeRestriction(TreeWalkListener listener, YangType type,
                                             GeneratedYangParser.RangeStatementContext ctx) {
 
         if (type.getDataType() == DERIVED) {
@@ -122,5 +125,31 @@
         if (rangeRestriction != null) {
             type.setDataTypeExtendedInfo(rangeRestriction);
         }
+        listener.getParsedDataStack().push(rangeRestriction);
+    }
+
+    /**
+     * Performs validation and updates the data model tree.
+     * It is called when parser exits from grammar rule (range).
+     *
+     * @param listener listener's object
+     * @param ctx context object of the grammar rule
+     */
+    public static void processRangeRestrictionExit(TreeWalkListener listener,
+                                       GeneratedYangParser.RangeStatementContext ctx) {
+
+        // Check for stack to be non empty.
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), EXIT);
+
+        Parsable tmpData = listener.getParsedDataStack().peek();
+        if (tmpData instanceof YangRangeRestriction) {
+            listener.getParsedDataStack().pop();
+        } else if (tmpData instanceof YangType
+                && ((YangType) tmpData).getDataType() == DERIVED) {
+            // TODO : need to handle in linker
+        } else {
+            throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RANGE_DATA,
+                    ctx.range().getText(), EXIT));
+        }
     }
 }
\ No newline at end of file
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
index 92a0d42..cd54436 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
@@ -38,6 +38,7 @@
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIntegerValue;
 import static org.onosproject.yangutils.utils.YangConstructType.VALUE_DATA;
 
 /**
@@ -62,25 +63,28 @@
     public static void processValueEntry(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
 
         // Check for stack to be non empty.
-        checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY);
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
+
+        // Validate value
+        int value = getValidIntegerValue(ctx.value().getText(), VALUE_DATA, ctx);
 
         // Obtain the node of the stack.
         Parsable tmpNode = listener.getParsedDataStack().peek();
         switch (tmpNode.getYangConstructType()) {
             case ENUM_DATA: {
                 YangEnum enumNode = (YangEnum) tmpNode;
-                if (!isEnumValueValid(listener, ctx)) {
+                if (!isEnumValueValid(listener, ctx, value)) {
                     ParserException parserException = new ParserException("Duplicate Value Entry");
-                    parserException.setLine(ctx.INTEGER().getSymbol().getLine());
-                    parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine());
+                    parserException.setLine(ctx.getStart().getLine());
+                    parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
                     throw parserException;
                 }
-                enumNode.setValue(Integer.valueOf(ctx.INTEGER().getText()));
+                enumNode.setValue(value);
                 break;
             }
             default:
                 throw new ParserException(
-                        constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY));
+                        constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
         }
     }
 
@@ -89,20 +93,22 @@
      *
      * @param listener Listener's object
      * @param ctx context object of the grammar rule
+     * @param value enum value
      * @return validation result
      */
-    private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
+    private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx,
+            int value) {
         Parsable enumNode = listener.getParsedDataStack().pop();
 
         // Check for stack to be non empty.
-        checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY);
+        checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
 
         Parsable tmpNode = listener.getParsedDataStack().peek();
         switch (tmpNode.getYangConstructType()) {
             case ENUMERATION_DATA: {
                 YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
                 for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
-                    if (Integer.valueOf(ctx.INTEGER().getText()) == curEnum.getValue()) {
+                    if (value == curEnum.getValue()) {
                         listener.getParsedDataStack().push(enumNode);
                         return false;
                     }
@@ -113,7 +119,7 @@
             default:
                 listener.getParsedDataStack().push(enumNode);
                 throw new ParserException(
-                        constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY));
+                        constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
         }
     }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
index d5efe91..de11f05 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
@@ -29,6 +29,18 @@
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.utils.YangConstructType;
 
+import static org.onosproject.yangutils.utils.UtilConstants.ADD;
+import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
+import static org.onosproject.yangutils.utils.UtilConstants.COLON;
+import static org.onosproject.yangutils.utils.UtilConstants.CARET;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
+import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_FILE_ERROR;
+
 /**
  * Represents an utility for listener.
  */
@@ -37,18 +49,10 @@
     private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
     private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])";
     private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+";
-    private static final String PLUS = "+";
+    private static final Pattern INTEGER_PATTERN = Pattern.compile("[-][0-9]+|[0-9]+");
     private static final String ONE = "1";
-    private static final String TRUE_KEYWORD = "true";
-    private static final String FALSE_KEYWORD = "false";
     private static final int IDENTIFIER_LENGTH = 64;
     private static final String DATE_FORMAT = "yyyy-MM-dd";
-    private static final String EMPTY_STRING = "";
-    private static final String HYPHEN = "-";
-    private static final String SLASH = "/";
-    private static final String SPACE = " ";
-    private static final String COLON = ":";
-    private static final String CARET = "^";
 
     /**
      * Creates a new listener util.
@@ -65,7 +69,7 @@
     public static String removeQuotesAndHandleConcat(String yangStringData) {
 
         yangStringData = yangStringData.replace("\"", EMPTY_STRING);
-        String[] tmpData = yangStringData.split(Pattern.quote(PLUS));
+        String[] tmpData = yangStringData.split(Pattern.quote(ADD));
         StringBuilder builder = new StringBuilder();
         for (String yangString : tmpData) {
             builder.append(yangString);
@@ -171,6 +175,41 @@
     }
 
     /**
+     * Validates integer value.
+     *
+     * @param integerValue integer to be validated
+     * @param yangConstruct yang construct for creating error message
+     * @param ctx context object of the grammar rule
+     * @return valid integer value
+     */
+    public static int getValidIntegerValue(String integerValue, YangConstructType yangConstruct,
+                                                      ParserRuleContext ctx) {
+
+        String value = removeQuotesAndHandleConcat(integerValue);
+        if (!INTEGER_PATTERN.matcher(value).matches()) {
+            ParserException parserException = new ParserException("YANG file error : " +
+                    YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " +
+                    "valid.");
+            parserException.setLine(ctx.getStart().getLine());
+            parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+            throw parserException;
+        }
+
+        int valueInInteger;
+        try {
+            valueInInteger = Integer.parseInt(value);
+        } catch (NumberFormatException e) {
+            ParserException parserException = new ParserException("YANG file error : " +
+                    YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " +
+                    "valid.");
+            parserException.setLine(ctx.getStart().getLine());
+            parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+            throw parserException;
+        }
+        return valueInInteger;
+    }
+
+    /**
      * Validates boolean value.
      *
      * @param booleanValue value to be validated
@@ -182,9 +221,9 @@
             ParserRuleContext ctx) {
 
         String value = removeQuotesAndHandleConcat(booleanValue);
-        if (value.equals(TRUE_KEYWORD)) {
+        if (value.equals(TRUE)) {
             return true;
-        } else if (value.equals(FALSE_KEYWORD)) {
+        } else if (value.equals(FALSE)) {
             return false;
         } else {
             ParserException parserException = new ParserException("YANG file error : " +
@@ -272,4 +311,21 @@
         }
         return targetNodes;
     }
+
+    /**
+     * Throws parser exception for unsupported YANG constructs.
+     *
+     * @param yangConstructType yang construct for creating error message
+     * @param ctx yang construct's context to get the line number and character position
+     * @param errorInfo error information
+     */
+    public static void handleUnsupportedYangConstruct(YangConstructType yangConstructType,
+        ParserRuleContext ctx, String errorInfo) {
+        ParserException parserException = new ParserException(YANG_FILE_ERROR
+                + QUOTES + YangConstructType.getYangConstructType(yangConstructType) + QUOTES
+                + errorInfo);
+        parserException.setLine(ctx.getStart().getLine());
+        parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+        throw parserException;
+    }
 }
\ No newline at end of file
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java
new file mode 100644
index 0000000..7cb870c
--- /dev/null
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangFileInfo.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.yangutils.plugin.manager;
+
+import org.onosproject.yangutils.datamodel.YangNode;
+
+/**
+ * Represents YANG file information.
+ */
+public class YangFileInfo {
+
+    /**
+     * YANG file name.
+     */
+    private String yangFileName;
+
+    /**
+     * Data model node after parsing YANG file.
+     */
+    private YangNode rootNode;
+
+    /**
+     * Returns data model node for YANG file.
+     *
+     * @return data model node for YANG file
+     */
+    public YangNode getRootNode() {
+        return rootNode;
+    }
+
+    /**
+     * Sets data model node for YANG file.
+     *
+     * @param rootNode of the Yang file
+     */
+    public void setRootNode(YangNode rootNode) {
+        this.rootNode = rootNode;
+    }
+
+    /**
+     * Returns YANG file name.
+     *
+     * @return yangFileName YANG file name
+     */
+    public String getYangFileName() {
+        return yangFileName;
+    }
+
+    /**
+     * Sets YANG file name.
+     *
+     * @param yangFileName YANG file name
+     */
+    public void setYangFileName(String yangFileName) {
+        this.yangFileName = yangFileName;
+    }
+}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
index f15d3b8..f602b29 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
@@ -28,6 +28,8 @@
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangSubModule;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.parser.YangUtilsParser;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
@@ -49,6 +51,7 @@
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.copyYangFilesToTarget;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findBelongsToModuleNode;
 
 /**
  * Represents ONOS YANG utility maven plugin.
@@ -137,17 +140,22 @@
             conflictResolver.setReplacementForPeriod(replacementForPeriod);
             conflictResolver.setReplacementForHyphen(replacementForHyphen);
             conflictResolver.setReplacementForUnderscore(replacementForUnderscore);
-            List<String> yangFiles = YangFileScanner.getYangFiles(searchDir);
+            List<YangFileInfo> yangFileInfo = YangFileScanner.getYangFiles(searchDir);
+            if (yangFileInfo == null || yangFileInfo.isEmpty()) {
+                // no files to translate
+                return;
+            }
             YangPluginConfig yangPlugin = new YangPluginConfig();
             yangPlugin.setCodeGenDir(codeGenDir);
             yangPlugin.setConflictResolver(conflictResolver);
-            Iterator<String> yangFileIterator = yangFiles.iterator();
+
+            Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
             while (yangFileIterator.hasNext()) {
-                String yangFile = yangFileIterator.next();
+                YangFileInfo yangFile = yangFileIterator.next();
                 try {
-                    YangNode yangNode = yangUtilsParser.getDataModel(yangFile);
+                    YangNode yangNode = yangUtilsParser.getDataModel(yangFile.getYangFileName());
+                    yangFile.setRootNode(yangNode);
                     setRootNode(yangNode);
-                    generateJavaCode(yangNode, yangPlugin, yangFile);
                 } catch (ParserException e) {
                     String logInfo = "Error in file: " + e.getFileName();
                     if (e.getLineNumber() != 0) {
@@ -163,8 +171,12 @@
                 }
             }
 
+            resolveLinkingForSubModule(yangFileInfo);
+
+            translateToJava(yangFileInfo, yangPlugin);
+
             addToSource(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG, project, context);
-            copyYangFilesToTarget(yangFiles, getDirectory(baseDir, outputDirectory), project);
+            copyYangFilesToTarget(yangFileInfo, getDirectory(baseDir, outputDirectory), project);
         } catch (Exception e) {
             String fileName = "";
             if (e instanceof TranslatorException) {
@@ -220,4 +232,40 @@
         this.rootNode = rootNode;
     }
 
+    /**
+     * Translates to java code corresponding to the YANG schema.
+     *
+     * @param yangFileInfo YANG file information
+     * @param yangPlugin YANG plugin config
+     * @throws IOException when fails to generate java code file the current
+     *             node
+     */
+    public static void translateToJava(List<YangFileInfo> yangFileInfo, YangPluginConfig yangPlugin)
+            throws IOException {
+        Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
+        while (yangFileIterator.hasNext()) {
+            YangFileInfo yangFile = yangFileIterator.next();
+            generateJavaCode(yangFile.getRootNode(), yangPlugin, yangFile.getYangFileName());
+        }
+    }
+
+    /**
+     * Resolves sub-module linking.
+     *
+     * @param yangFileInfo YANG file information
+     * @throws DataModelException when belongs-to module node is not found
+     */
+    public static void resolveLinkingForSubModule(List<YangFileInfo> yangFileInfo) throws DataModelException {
+        Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
+        while (yangFileIterator.hasNext()) {
+            YangFileInfo yangFile = yangFileIterator.next();
+            YangNode yangNode = yangFile.getRootNode();
+            if (yangNode instanceof YangSubModule) {
+                String belongsToModuleName = ((YangSubModule) yangNode).getBelongsTo()
+                        .getBelongsToModuleName();
+                YangNode moduleNode = findBelongsToModuleNode(yangFileInfo, belongsToModuleName);
+                ((YangSubModule) yangNode).getBelongsTo().setModuleNode(moduleNode);
+            }
+        }
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
index 419f15e..a0834f0 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
@@ -18,6 +18,7 @@
 import java.io.IOException;
 
 import org.onosproject.yangutils.datamodel.YangBelongsTo;
+import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangSubModule;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
@@ -108,8 +109,7 @@
      * @return the name space string of the module.
      */
     private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) {
-        // TODO Auto-generated method stub
-        return "";
+        return ((YangModule) belongsToInfo.getModuleNode()).getNameSpace().getUri();
     }
 
     /**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 278c332..24744fa 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -257,6 +257,16 @@
     public static final String LISTENER_PKG = "org.onosproject.event";
 
     /**
+     * Static attribute for colon.
+     */
+    public static final String COLON = ":";
+
+    /**
+     * Static attribute for caret.
+     */
+    public static final String CARET = "^";
+
+    /**
      * Static attribute for input string.
      */
     public static final String INPUT = "input";
@@ -932,6 +942,22 @@
     public static final String YANG_UTILS_TODO = "//TODO: YANG utils generated code";
 
     /**
+     * Static attribute for YANG file error.
+     */
+    public static final String YANG_FILE_ERROR = "YANG file error : ";
+
+    /**
+     * Static attribute for unsupported error information.
+     */
+    public static final String UNSUPPORTED_YANG_CONSTRUCT = " is not supported.";
+
+    /**
+     * Static attribute for currently unsupported error information.
+     */
+    public static final String CURRENTLY_UNSUPPORTED = " is not supported in current version, please check wiki" +
+            " for YANG utils road map.";
+
+    /**
      * Creates an instance of util constants.
      */
     private UtilConstants() {
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/YangConstructType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/YangConstructType.java
index f9a6fda..91bc61a 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/YangConstructType.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/YangConstructType.java
@@ -287,7 +287,77 @@
     /**
      * Identifies the YANG pattern element parsed data.
      */
-    PATTERN_DATA;
+    PATTERN_DATA,
+
+    /**
+     * Identifies the YANG extension element parsed data.
+     */
+    EXTENSION_DATA,
+
+    /**
+     * Identifies the YANG identity element parsed data.
+     */
+    IDENTITY_DATA,
+
+    /**
+     * Identifies the YANG base element parsed data.
+     */
+    BASE_DATA,
+
+    /**
+     * Identifies the YANG feature element parsed data.
+     */
+    FEATURE_DATA,
+
+    /**
+     * Identifies the YANG if-feature element parsed data.
+     */
+    IF_FEATURE_DATA,
+
+    /**
+     * Identifies the YANG path element parsed data.
+     */
+    PATH_DATA,
+
+    /**
+     * Identifies the YANG require-instance element parsed data.
+     */
+    REQUIRE_INSTANCE_DATA,
+
+    /**
+     * Identifies the YANG ordered-by element parsed data.
+     */
+    ORDERED_BY_DATA,
+
+    /**
+     * Identifies the YANG error-message element parsed data.
+     */
+    ERROR_MESSAGE_DATA,
+
+    /**
+     * Identifies the YANG error-app-tag element parsed data.
+     */
+    ERROR_APP_TAG_DATA,
+
+    /**
+     * Identifies the YANG unique element parsed data.
+     */
+    UNIQUE_DATA,
+
+    /**
+     * Identifies the YANG refine element parsed data.
+     */
+    REFINE_DATA,
+
+    /**
+     * Identifies the YANG deviation element parsed data.
+     */
+    DEVIATION_DATA,
+
+    /**
+     * Identifies the YANG anyxml element parsed data.
+     */
+    ANYXML_DATA;
 
     /**
      * Returns the YANG construct keyword corresponding to enum values.
@@ -406,6 +476,34 @@
                 return "length";
             case PATTERN_DATA:
                 return "pattern";
+            case EXTENSION_DATA:
+                return "extension";
+            case IDENTITY_DATA:
+                return "identity";
+            case BASE_DATA:
+                return "base";
+            case FEATURE_DATA:
+                return "feature";
+            case IF_FEATURE_DATA:
+                return "if-feature";
+            case PATH_DATA:
+                return "path";
+            case REQUIRE_INSTANCE_DATA:
+                return "require-instance";
+            case ORDERED_BY_DATA:
+                return "ordered-by";
+            case ERROR_MESSAGE_DATA:
+                return "error-message";
+            case ERROR_APP_TAG_DATA:
+                return "error-app-tag";
+            case UNIQUE_DATA:
+                return "unique";
+            case REFINE_DATA:
+                return "refine";
+            case DEVIATION_DATA:
+                return "deviation";
+            case ANYXML_DATA:
+                return "anyxml";
             default:
                 return "yang";
         }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
index 7c451e1..7fa99b7 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
@@ -21,6 +21,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Stack;
+import org.onosproject.yangutils.plugin.manager.YangFileInfo;
 
 /**
  * Represents utility for searching the files in a directory.
@@ -51,17 +52,23 @@
     }
 
     /**
-     * Returns the list of YANG files.
+     * Returns the list of YANG file information.
      *
      * @param root specified directory
-     * @return list of YANG files
+     * @return list of YANG file information
      * @throws NullPointerException when no files are there
      * @throws IOException when files get deleted while performing the
      *             operations
      */
-    public static List<String> getYangFiles(String root) throws IOException {
-
-        return getFiles(root, YANG_FILE_EXTENTION);
+    public static List<YangFileInfo> getYangFiles(String root) throws IOException {
+        List<String> yangFiles = getFiles(root, YANG_FILE_EXTENTION);
+        List<YangFileInfo> fileInfo = new LinkedList<>();
+        for (String yangFile : yangFiles) {
+            YangFileInfo yangFileInfo = new YangFileInfo();
+            yangFileInfo.setYangFileName(yangFile);
+            fileInfo.add(yangFileInfo);
+        }
+        return fileInfo;
     }
 
     /**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
index bf166f0..d8f7e53 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
@@ -24,6 +24,7 @@
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Stack;
 
@@ -33,6 +34,7 @@
 import org.slf4j.Logger;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
+import org.onosproject.yangutils.plugin.manager.YangFileInfo;
 import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
@@ -245,15 +247,15 @@
     /**
      * Copies YANG files to the current project's output directory.
      *
-     * @param yangFiles list of YANG files
+     * @param yangFileInfo list of YANG files
      * @param outputDir project's output directory
      * @param project maven project
      * @throws IOException when fails to copy files to destination resource directory
      */
-    public static void copyYangFilesToTarget(List<String> yangFiles, String outputDir, MavenProject project)
+    public static void copyYangFilesToTarget(List<YangFileInfo> yangFileInfo, String outputDir, MavenProject project)
             throws IOException {
 
-        List<File> files = getListOfFile(yangFiles);
+        List<File> files = getListOfFile(yangFileInfo);
 
         String path = outputDir + TARGET_RESOURCE_PATH;
         File targetDir = new File(path);
@@ -272,13 +274,15 @@
     /**
      * Provides a list of files from list of strings.
      *
-     * @param strings list of strings
+     * @param yangFileInfo list of yang file information
      * @return list of files
      */
-    private static List<File> getListOfFile(List<String> strings) {
+    private static List<File> getListOfFile(List<YangFileInfo> yangFileInfo) {
         List<File> files = new ArrayList<>();
-        for (String file : strings) {
-            files.add(new File(file));
+        Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
+        while (yangFileIterator.hasNext()) {
+            YangFileInfo yangFile = yangFileIterator.next();
+            files.add(new File(yangFile.getYangFileName()));
         }
         return files;
     }
diff --git a/utils/yangutils/src/main/resources/GeneratedYang.g4 b/utils/yangutils/src/main/resources/GeneratedYang.g4
index 11e7833..c44a555 100644
--- a/utils/yangutils/src/main/resources/GeneratedYang.g4
+++ b/utils/yangutils/src/main/resources/GeneratedYang.g4
@@ -380,6 +380,7 @@
                     | leafListStatement
                     | listStatement
                     | choiceStatement
+                    | anyxmlStatement
                     | usesStatement;
 
     /**
@@ -429,13 +430,26 @@
      *                        instance-identifier-specification /
      *                        bits-specification /
      *                        union-specification
-     * TODO : decimal64-specification to be added
+     *
      */
-    typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
+    typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification
                     | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
                     | bitsSpecification | unionSpecification;
 
     /**
+     *  fraction-digits-stmt = fraction-digits-keyword sep
+     *                         fraction-digits-arg-str stmtend
+     *
+     *  fraction-digits-arg-str = < a string that matches the rule
+     *                             fraction-digits-arg >
+     *
+     *  fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
+     *                              "5" / "6" / "7" / "8"])
+     *                        / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
+     */
+    decimal64Specification : FRACTION_DIGITS_KEYWORD fraction STMTEND;
+
+    /**
      *  numerical-restrictions = range-stmt stmtsep
      */
     numericalRestrictions : rangeStatement;
@@ -746,7 +760,7 @@
     /**
      *  value-stmt          = value-keyword sep integer-value stmtend
      */
-    valueStatement : VALUE_KEYWORD ((MINUS INTEGER) | INTEGER) STMTEND;
+    valueStatement : VALUE_KEYWORD value STMTEND;
 
     /**
      *   grouping-stmt       = grouping-keyword sep identifier-arg-str optsep
@@ -899,7 +913,7 @@
      *                        list-stmt /
      *                        anyxml-stmt
      */
-    shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement;
+    shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement | anyxmlStatement;
 
     /**
      *  case-stmt           = case-keyword sep identifier-arg-str optsep
@@ -919,6 +933,25 @@
               | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
 
     /**
+     *    anyxml-stmt         = anyxml-keyword sep identifier-arg-str optsep
+     *                         (";" /
+     *                         "{" stmtsep
+     *                             ;; these stmts can appear in any order
+     *                             [when-stmt stmtsep]
+     *                             *(if-feature-stmt stmtsep)
+     *                             *(must-stmt stmtsep)
+     *                             [config-stmt stmtsep]
+     *                             [mandatory-stmt stmtsep]
+     *                             [status-stmt stmtsep]
+     *                             [description-stmt stmtsep]
+     *                             [reference-stmt stmtsep]
+     *                          "}")
+     */
+     anyxmlStatement : ANYXML_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
+                     | mustStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
+                     | referenceStatement)* RIGHT_CURLY_BRACE);
+
+    /**
      *  uses-stmt           = uses-keyword sep identifier-ref-arg-str optsep
      *                        (";" /
      *                         "{" stmtsep
@@ -934,7 +967,7 @@
      * TODO : 0..1 occurance to be checked in listener
      */
     usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
-                | descriptionStatement | referenceStatement | refineStatement | usesAugmentStatement)* RIGHT_CURLY_BRACE);
+                | descriptionStatement | referenceStatement | refineStatement | augmentStatement)* RIGHT_CURLY_BRACE);
 
     /**
      *  refine-stmt         = refine-keyword sep refine-arg-str optsep
@@ -951,7 +984,7 @@
      */
     refineStatement : REFINE_KEYWORD refine (STMTEND  | LEFT_CURLY_BRACE (refineContainerStatements
                     | refineLeafStatements | refineLeafListStatements | refineListStatements | refineChoiceStatements
-                    | refineCaseStatements) RIGHT_CURLY_BRACE);
+                    | refineCaseStatements | refineAnyxmlStatements) RIGHT_CURLY_BRACE);
 
     /**
      *  refine-container-stmts =
@@ -1024,22 +1057,15 @@
     refineCaseStatements : (descriptionStatement | referenceStatement)? | (referenceStatement | descriptionStatement)?;
 
     /**
-     *  uses-augment-stmt   = augment-keyword sep uses-augment-arg-str optsep
-     *                        "{" stmtsep
-     *                            ;; these stmts can appear in any order
-     *                            [when-stmt stmtsep]
-     *                            *(if-feature-stmt stmtsep)
-     *                            [status-stmt stmtsep]
-     *                            [description-stmt stmtsep]
-     *                            [reference-stmt stmtsep]
-     *                            1*((data-def-stmt stmtsep) /
-     *                               (case-stmt stmtsep))
-     *                         "}"
-     * TODO : 0..1 occurance to be checked in listener
+     *  refine-anyxml-stmts = ;; these stmts can appear in any order
+     *                        *(must-stmt stmtsep)
+     *                        [config-stmt stmtsep]
+     *                        [mandatory-stmt stmtsep]
+     *                        [description-stmt stmtsep]
+     *                        [reference-stmt stmtsep]
      */
-    usesAugmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
-                         | statusStatement | descriptionStatement | referenceStatement | dataDefStatement
-                         | caseStatement)* RIGHT_CURLY_BRACE;
+     refineAnyxmlStatements : (mustStatement | configStatement | mandatoryStatement | descriptionStatement
+                            | referenceStatement)*;
 
     /**
      *  augment-stmt        = augment-keyword sep augment-arg-str optsep
@@ -1251,6 +1277,10 @@
 
     deviation : string;
 
+    value : string;
+
+    fraction : string;
+
     yangConstruct : ANYXML_KEYWORD | ARGUMENT_KEYWORD | AUGMENT_KEYWORD | BASE_KEYWORD | BELONGS_TO_KEYWORD
                   | BIT_KEYWORD | CASE_KEYWORD | CHOICE_KEYWORD | CONFIG_KEYWORD | CONTACT_KEYWORD | CONTAINER_KEYWORD
                   | DEFAULT_KEYWORD | DESCRIPTION_KEYWORD | ENUM_KEYWORD ERROR_APP_TAG_KEYWORD | ERROR_MESSAGE_KEYWORD
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
new file mode 100644
index 0000000..cebd680
--- /dev/null
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.yangutils.parser.impl;
+
+import java.io.IOException;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+
+/**
+ * Test cases for testing tree walk listener functionality.
+ */
+public class TreeWalkListenerTest {
+
+    private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+    /**
+     * Checks whether exception is thrown for ordered statement.
+     */
+    @Test
+    public void processOrderedByStatement() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("YANG file error : \"ordered-by\" is not supported in current version, please check wiki" +
+                " for YANG utils road map.");
+        manager.getDataModel("src/test/resources/OrderedByStatement.yang");
+    }
+
+    /**
+     * Checks whether exception is thrown for anyxml statement.
+     */
+    @Test
+    public void processAnyXmlStatement() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("YANG file error : \"anyxml\" is not supported.");
+        manager.getDataModel("src/test/resources/AnyxmlStatement.yang");
+    }
+}
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java
index 439832f..d129e38 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java
@@ -134,9 +134,9 @@
     @Test
     public void processModuleSubStatementConfig() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'config' expecting {'augment', 'choice', 'contact', 'container',"
-                + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include', "
-                + "'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
+        thrown.expectMessage("mismatched input 'config' expecting {'anyxml', 'augment', 'choice', 'contact', "
+                + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import',"
+                + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
                 + " 'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementConfig.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
new file mode 100644
index 0000000..2aab556
--- /dev/null
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.yangutils.parser.impl.listeners;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import org.junit.Test;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangModule;
+import org.onosproject.yangutils.datamodel.YangLeaf;
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangContainer;
+import org.onosproject.yangutils.datamodel.YangNodeType;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing default listener functionality.
+ */
+public class DefaultListenerTest {
+
+    private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+    /**
+     * Checks if default value is set correctly.
+     */
+    @Test
+    public void processLeafSubStatementDefault() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementDefault.yang");
+        // Check whether the data model tree returned is of type module.
+        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"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDefaultValueInString(), is("\"1\""));
+    }
+
+    /**
+     * Checks if default value is set correctly.
+     */
+    @Test
+    public void processChoiceSubStatementDefault() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/ChoiceSubStatementDefault.yang");
+        // Check whether the data model tree returned is of type module.
+        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"));
+
+        YangContainer yangContainer = (YangContainer) yangNode.getChild();
+        assertThat(yangContainer.getName(), is("food"));
+
+        YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+        assertThat(yangChoice.getName(), is("snack"));
+        assertThat(yangChoice.getDefaultValueInString(), is("\"hello\""));
+    }
+}
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java
index 6f13667..a78c65f 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java
@@ -18,7 +18,10 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
+
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.onosproject.yangutils.datamodel.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangEnum;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
@@ -38,6 +41,9 @@
  */
 public class EnumListenerTest {
 
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
     private final YangUtilsParserManager manager = new YangUtilsParserManager();
 
     /**
@@ -84,7 +90,28 @@
      */
     @Test(expected = ParserException.class)
     public void processEnumWithDuplicateName() throws IOException, ParserException {
-
         YangNode node = manager.getDataModel("src/test/resources/EnumWithDuplicateName.yang");
     }
+
+    /**
+     * Checks enum boundary value.
+     */
+    @Test
+    public void processEnumBoundaryValue() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("YANG file error : value value 21474836472147483647 is not valid.");
+        YangNode node = manager.getDataModel("src/test/resources/EnumBoundaryValue.yang");
+    }
+
+    /**
+     * Checks whether exception is thrown if value is not specified following max enum value.
+     */
+    @Test
+    public void processEnumMaxNextValue() throws IOException, ParserException {
+        thrown.expect(ParserException.class);
+        thrown.expectMessage("YANG file error : "
+                + "An enum value MUST be specified for enum substatements following the one"
+                + "with the current highest value");
+        YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang");
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java
index 37b4733..510b313 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java
@@ -203,12 +203,32 @@
     }
 
     /**
+     * Checks key values are set correctly.
+     */
+    @Test
+    public void processKeyWithUsesInList() throws IOException, ParserException {
+        YangNode node = manager.getDataModel("src/test/resources/KeyWithUsesInList.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        // Check whether the list is child of module
+        YangList yangList = (YangList) yangNode.getChild().getNextSibling();
+        assertThat(yangList.getName(), is("valid"));
+
+        ListIterator<String> keyList = yangList.getKeyList().listIterator();
+        assertThat(keyList.next(), is("invalid-interval"));
+    }
+
+    /**
      * Checks whether exception is thrown when key leaf identifier is not found in list.
      */
     @Test
     public void processInvalidLeafIdentifier() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("Leaf identifier must refer to a child leaf of the list");
+        thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list");
         YangNode node = manager.getDataModel("src/test/resources/InvalidLeafIdentifier.yang");
     }
 
@@ -218,7 +238,7 @@
     @Test
     public void processInvalidLeafListIdentifier() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("Leaf-list identifier must refer to a child leaf of the list");
+        thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list");
         YangNode node = manager.getDataModel("src/test/resources/InvalidLeafListIdentifier.yang");
     }
 
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
index fe918fa..8e7489b 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
@@ -94,9 +94,9 @@
     @Test
     public void processLeafListInvalidStatement() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'leaflist' expecting {'augment', 'choice', 'contact', 'container',"
-                + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include',"
-                + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
+        thrown.expectMessage("mismatched input 'leaflist' expecting {'anyxml', 'augment', 'choice', 'contact', "
+                + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import',"
+                + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
                 + " 'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidStatement.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
index 186d549..b330e53 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
@@ -95,9 +95,9 @@
     @Test
     public void processLeafInvalidStatement() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'leafs' expecting {'augment', 'choice', 'contact', 'container',"
-                + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include',"
-                + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
+        thrown.expectMessage("mismatched input 'leafs' expecting {'anyxml', 'augment', 'choice', 'contact', "
+                + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import',"
+                + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
                 + " 'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/LeafInvalidStatement.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
index 3c01335..40036f5 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
@@ -232,4 +232,39 @@
                 " 18446744073709551615.");
         YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
     }
+
+    /**
+     * Checks valid length substatements.
+     */
+    @Test
+    public void processLengthSubStatements() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/LengthSubStatements.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+        YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
+                .getDataType().getDataTypeExtendedInfo();
+        YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+        assertThat(lengthRestriction.getDescription(), is("\"length description\""));
+        assertThat(lengthRestriction.getReference(), is("\"length reference\""));
+
+        ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+                .listIterator();
+
+        YangRangeInterval rangeInterval = lengthListIterator.next();
+
+        assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+        assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java
index 246d4b0..52e43a9 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java
@@ -148,9 +148,9 @@
     @Test
     public void processModuleSubStatementMandatory() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'mandatory' expecting {'augment', 'choice', 'contact', 'container',"
-                + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include',"
-                + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
+        thrown.expectMessage("mismatched input 'mandatory' expecting {'anyxml', 'augment', 'choice', 'contact',"
+                + " 'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import',"
+                + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference',"
                 + " 'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementMandatory.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
index 00db373..928af5c 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
@@ -166,4 +166,32 @@
                 .getPatternList().listIterator();
         assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+"));
     }
+
+    /**
+     * Checks valid pattern substatement.
+     */
+    @Test
+    public void processPatternSubStatements() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/PatternSubStatements.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+        YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
+                .getDataType().getDataTypeExtendedInfo();
+        assertThat(stringRestriction.getDescription(), is("\"pattern description\""));
+        assertThat(stringRestriction.getReference(), is("\"pattern reference\""));
+        ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+                .getPatternList().listIterator();
+        assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
index 76da997..88672fd 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
@@ -174,4 +174,37 @@
         thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32.");
         YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
     }
+
+    /**
+     * Checks valid range statement with description.
+     */
+    @Test
+    public void processRangeSubStatements() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/RangeSubStatements.yang");
+
+        assertThat((node instanceof YangModule), is(true));
+        assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("invalid-interval"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+        YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
+                .getDataType().getDataTypeExtendedInfo();
+
+        assertThat(rangeRestriction.getDescription(), is("\"range description\""));
+        assertThat(rangeRestriction.getReference(), is("\"range reference\""));
+
+        ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+                .listIterator();
+        YangRangeInterval rangeInterval = rangeListIterator.next();
+        assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+        assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
+        assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
+    }
 }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java
index 7f0d1ea..b2cbd71 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java
@@ -150,9 +150,9 @@
     @Test
     public void processModuleSubStatementStatus() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'status' expecting {'augment', 'choice', 'contact', 'container', "
-                + "'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include',"
-                + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference', "
+        thrown.expectMessage("mismatched input 'status' expecting {'anyxml', 'augment', 'choice', 'contact', "
+                + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import',"
+                + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference', "
                 + "'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementStatus.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
index 6479991..6684df5 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
@@ -76,9 +76,9 @@
     @Test
     public void processModuleSubStatementUnits() throws IOException, ParserException {
         thrown.expect(ParserException.class);
-        thrown.expectMessage("mismatched input 'type' expecting {'augment', 'choice', 'contact', 'container', "
-                + "'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', "
-                + "'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', "
+        thrown.expectMessage("mismatched input 'type' expecting {'anyxml', 'augment', 'choice', 'contact', "
+                + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity',"
+                + " 'import', 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', "
                 + "'reference', 'revision', 'rpc', 'typedef', 'uses', '}'}");
         YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementUnits.yang");
     }
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
index f0d5357..6dae702 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
@@ -80,6 +80,84 @@
     }
 
     /**
+     * Checks explicitly configured negative value.
+     */
+    @Test
+    public void processValueStatementWithNegativeValue() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithNegativeValue.yang");
+
+        // Check whether the data model tree returned is of type module.
+        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"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("speed"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+        assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+                is("speed_enum"));
+
+        Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+        for (YangEnum tmp : enumSet) {
+            if (tmp.getNamedValue().equals("10m")) {
+                assertThat(tmp.getValue(), is(-2));
+            } else if (tmp.getNamedValue().equals("100m")) {
+                assertThat(tmp.getValue(), is(-1));
+            } else if (tmp.getNamedValue().equals("auto")) {
+                assertThat(tmp.getValue(), is(0));
+            }
+        }
+    }
+
+    /**
+     * Checks explicitly configured value with double quotes.
+     */
+    @Test
+    public void processValueStatementWithQuotes() throws IOException, ParserException {
+
+        YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithQuotes.yang");
+
+        // Check whether the data model tree returned is of type module.
+        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"));
+
+        ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+        YangLeaf leafInfo = leafIterator.next();
+
+        assertThat(leafInfo.getName(), is("speed"));
+        assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+        assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+        assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+                is("speed_enum"));
+
+        Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+        for (YangEnum tmp : enumSet) {
+            if (tmp.getNamedValue().equals("10m")) {
+                assertThat(tmp.getValue(), is(10));
+            } else if (tmp.getNamedValue().equals("100m")) {
+                assertThat(tmp.getValue(), is(100));
+            } else if (tmp.getNamedValue().equals("auto")) {
+                assertThat(tmp.getValue(), is(1000));
+            }
+        }
+    }
+
+    /**
      * Checks explicit value and auto generated value.
      */
     @Test
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java
index d3137b3..7d199b9 100644
--- a/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java
@@ -26,6 +26,7 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.onosproject.yangutils.plugin.manager.YangFileInfo;
 
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
@@ -135,7 +136,7 @@
 
         String emptyYangDir = baseDir + separator + "scanner1";
         File path = createDirectory(emptyYangDir);
-        List<String> emptyDirContents = getYangFiles(path.toString());
+        List<YangFileInfo> emptyDirContents = getYangFiles(path.toString());
         List<String> expectedContents = new LinkedList<>();
         assertThat(true, is(emptyDirContents.equals(expectedContents)));
     }
diff --git a/utils/yangutils/src/test/resources/AnyxmlStatement.yang b/utils/yangutils/src/test/resources/AnyxmlStatement.yang
new file mode 100644
index 0000000..4b1e421
--- /dev/null
+++ b/utils/yangutils/src/test/resources/AnyxmlStatement.yang
@@ -0,0 +1,16 @@
+module event {
+
+    namespace "http://example.com/event";
+    prefix "ev";
+
+    notification event {
+        leaf event-class {
+            type string;
+        }
+        anyxml reporting-entity;
+        leaf severity {
+            type string;
+        }
+    }
+}
+
diff --git a/utils/yangutils/src/test/resources/ChoiceSubStatementDefault.yang b/utils/yangutils/src/test/resources/ChoiceSubStatementDefault.yang
new file mode 100644
index 0000000..b9fd60d
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ChoiceSubStatementDefault.yang
@@ -0,0 +1,23 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    container food {
+       choice snack {
+           case sports-arena {
+               leaf pretzel {
+                   type string;
+               }
+               leaf beer {
+                   type string;
+               }
+           }
+           case late-night {
+               leaf chocolate {
+                   type string;
+               }
+           }
+           default "hello";
+       }
+    }
+}
diff --git a/utils/yangutils/src/test/resources/EnumBoundaryValue.yang b/utils/yangutils/src/test/resources/EnumBoundaryValue.yang
new file mode 100644
index 0000000..ac87ef0
--- /dev/null
+++ b/utils/yangutils/src/test/resources/EnumBoundaryValue.yang
@@ -0,0 +1,16 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf ifType {
+        type enumeration {
+             enum "unbounded";
+             enum ZERO;
+             enum two;
+             enum four;
+             enum seven {
+                 value 21474836472147483647;
+             }
+         }
+     }
+}
diff --git a/utils/yangutils/src/test/resources/EnumMaxNextValue.yang b/utils/yangutils/src/test/resources/EnumMaxNextValue.yang
new file mode 100644
index 0000000..4e4a373
--- /dev/null
+++ b/utils/yangutils/src/test/resources/EnumMaxNextValue.yang
@@ -0,0 +1,18 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf ifType {
+        type enumeration {
+             enum "unbounded";
+             enum ZERO;
+             enum two;
+             enum four;
+             enum seven {
+                 value 2147483647;
+             }
+             enum five;    
+            
+         }
+    }
+}
diff --git a/utils/yangutils/src/test/resources/KeyWithUsesInList.yang b/utils/yangutils/src/test/resources/KeyWithUsesInList.yang
new file mode 100644
index 0000000..d076d0a
--- /dev/null
+++ b/utils/yangutils/src/test/resources/KeyWithUsesInList.yang
@@ -0,0 +1,23 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    grouping network {
+        leaf invalid-interval {
+            type "string";
+            units "seconds";
+            status current;
+            reference "RFC 6020";
+        }
+    }
+    list valid {
+        key "invalid-interval";
+        leaf invalid {
+            type "string";
+            units "seconds";
+            status current;
+            reference "RFC 6020";
+        }
+        uses "network";
+    }
+}
diff --git a/utils/yangutils/src/test/resources/LeafSubStatementDefault.yang b/utils/yangutils/src/test/resources/LeafSubStatementDefault.yang
new file mode 100644
index 0000000..a78131d
--- /dev/null
+++ b/utils/yangutils/src/test/resources/LeafSubStatementDefault.yang
@@ -0,0 +1,15 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf invalid-interval {
+        type "uint16";
+        units "seconds";
+        default "1";
+        description "Interval before a route is declared invalid";
+        config true;
+        mandatory true;
+        status current;
+        reference "RFC 6020";
+    }
+}
diff --git a/utils/yangutils/src/test/resources/LengthSubStatements.yang b/utils/yangutils/src/test/resources/LengthSubStatements.yang
new file mode 100644
index 0000000..f61f979
--- /dev/null
+++ b/utils/yangutils/src/test/resources/LengthSubStatements.yang
@@ -0,0 +1,13 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf invalid-interval {
+        type string {
+            length "0..100" {
+                description "length description";
+                reference "length reference";
+            }
+         }
+    }
+}
diff --git a/utils/yangutils/src/test/resources/OrderedByStatement.yang b/utils/yangutils/src/test/resources/OrderedByStatement.yang
new file mode 100644
index 0000000..f6b4336
--- /dev/null
+++ b/utils/yangutils/src/test/resources/OrderedByStatement.yang
@@ -0,0 +1,10 @@
+module rock {
+    namespace "http://example.net/rock";
+    prefix "rock";
+    leaf-list cipher  {
+         type string;
+         ordered-by user;
+         description "A list of ciphers";
+    }
+}
+
diff --git a/utils/yangutils/src/test/resources/PatternSubStatements.yang b/utils/yangutils/src/test/resources/PatternSubStatements.yang
new file mode 100644
index 0000000..3e792c6
--- /dev/null
+++ b/utils/yangutils/src/test/resources/PatternSubStatements.yang
@@ -0,0 +1,13 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf invalid-interval {
+        type string {
+            pattern "[a-zA-Z]" {
+                description "pattern description";
+                reference "pattern reference";
+            }
+         }
+    }
+}
diff --git a/utils/yangutils/src/test/resources/RangeSubStatements.yang b/utils/yangutils/src/test/resources/RangeSubStatements.yang
new file mode 100644
index 0000000..4b57bd0
--- /dev/null
+++ b/utils/yangutils/src/test/resources/RangeSubStatements.yang
@@ -0,0 +1,14 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf invalid-interval {
+        type int32 {
+            range "1..4 | 10..20" {
+                description "range description";
+                reference "range reference";
+            }
+         }
+    }
+}
+
diff --git a/utils/yangutils/src/test/resources/ValidAugmentStatement.yang b/utils/yangutils/src/test/resources/ValidAugmentStatement.yang
index 6175c35..f6c247e 100644
--- a/utils/yangutils/src/test/resources/ValidAugmentStatement.yang
+++ b/utils/yangutils/src/test/resources/ValidAugmentStatement.yang
@@ -10,7 +10,6 @@
              prefix "P";
          }
     augment "/if:interfaces/if:ifEntry" {
-        when "if:ifType='ds0'";
         leaf ds0ChannelNumber {
             type P:ChannelNumber;
         }
diff --git a/utils/yangutils/src/test/resources/ValidNotificationStatement.yang b/utils/yangutils/src/test/resources/ValidNotificationStatement.yang
index 072df23..7e6bc17 100644
--- a/utils/yangutils/src/test/resources/ValidNotificationStatement.yang
+++ b/utils/yangutils/src/test/resources/ValidNotificationStatement.yang
@@ -14,9 +14,7 @@
            type int32;
         }
         leaf if-name {
-           type leafref {
-               path "/interface/name";
-           }
+           type leafref;
         }
         leaf if-admin-status {
            type P:admin-status;
diff --git a/utils/yangutils/src/test/resources/ValueStatementWithNegativeValue.yang b/utils/yangutils/src/test/resources/ValueStatementWithNegativeValue.yang
new file mode 100644
index 0000000..a3f236b
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ValueStatementWithNegativeValue.yang
@@ -0,0 +1,18 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf speed {
+        type enumeration {
+          enum 10m {
+	     value -2;
+          }
+          enum 100m {
+	     value "-1";
+          }
+          enum auto {
+	     value 0;
+          }
+        }
+    }
+}
diff --git a/utils/yangutils/src/test/resources/ValueStatementWithQuotes.yang b/utils/yangutils/src/test/resources/ValueStatementWithQuotes.yang
new file mode 100644
index 0000000..e166ca4
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ValueStatementWithQuotes.yang
@@ -0,0 +1,18 @@
+module Test {
+    yang-version 1;
+    namespace http://huawei.com;
+    prefix Ant;
+    leaf speed {
+        type enumeration {
+          enum 10m {
+	     value "10";
+          }
+          enum 100m {
+	     value "100";
+          }
+          enum auto {
+	     value "1000";
+          }
+        }
+    }
+}