/*
 * 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.
 */

/**
 * This is a YANG grammar for lexer based on which ANTLR will generate YANG lexer.
 */

lexer grammar YangLexer;

    // Statements keywords
    ANYXML_KEYWORD      : 'anyxml';
    ARGUMENT_KEYWORD    : 'argument';
    AUGMENT_KEYWORD     : 'augment';
    BASE_KEYWORD        : 'base';
    BELONGS_TO_KEYWORD  : 'belongs-to';
    BIT_KEYWORD         : 'bit';
    CASE_KEYWORD        : 'case';
    CHOICE_KEYWORD      : 'choice';
    CONFIG_KEYWORD      : 'config';
    CONTACT_KEYWORD     : 'contact';
    CONTAINER_KEYWORD   : 'container';
    DEFAULT_KEYWORD     : 'default';
    DESCRIPTION_KEYWORD : 'description';
    ENUM_KEYWORD        : 'enum';
    ERROR_APP_TAG_KEYWORD : 'error-app-tag';
    ERROR_MESSAGE_KEYWORD : 'error-message';
    EXTENSION_KEYWORD   : 'extension';
    DEVIATION_KEYWORD   : 'deviation';
    DEVIATE_KEYWORD     : 'deviate';
    FEATURE_KEYWORD     : 'feature';
    FRACTION_DIGITS_KEYWORD : 'fraction-digits';
    GROUPING_KEYWORD    : 'grouping';
    IDENTITY_KEYWORD    : 'identity';
    IF_FEATURE_KEYWORD  : 'if-feature';
    IMPORT_KEYWORD      : 'import';
    INCLUDE_KEYWORD     : 'include';
    INPUT_KEYWORD       : 'input';
    KEY_KEYWORD         : 'key';
    LEAF_KEYWORD        : 'leaf';
    LEAF_LIST_KEYWORD   : 'leaf-list';
    LENGTH_KEYWORD      : 'length';
    LIST_KEYWORD        : 'list';
    MANDATORY_KEYWORD   : 'mandatory';
    MAX_ELEMENTS_KEYWORD : 'max-elements';
    MIN_ELEMENTS_KEYWORD : 'min-elements';
    MODULE_KEYWORD      : 'module';
    MUST_KEYWORD        : 'must';
    NAMESPACE_KEYWORD   : 'namespace';
    NOTIFICATION_KEYWORD: 'notification';
    ORDERED_BY_KEYWORD  : 'ordered-by';
    ORGANIZATION_KEYWORD: 'organization';
    OUTPUT_KEYWORD      : 'output';
    PATH_KEYWORD        : 'path';
    PATTERN_KEYWORD     : 'pattern';
    POSITION_KEYWORD    : 'position';
    PREFIX_KEYWORD      : 'prefix';
    PRESENCE_KEYWORD    : 'presence';
    RANGE_KEYWORD       : 'range';
    REFERENCE_KEYWORD   : 'reference';
    REFINE_KEYWORD      : 'refine';
    REQUIRE_INSTANCE_KEYWORD : 'require-instance';
    REVISION_KEYWORD    : 'revision';
    REVISION_DATE_KEYWORD : 'revision-date';
    RPC_KEYWORD         : 'rpc';
    STATUS_KEYWORD      : 'status';
    SUBMODULE_KEYWORD   : 'submodule';
    TYPE_KEYWORD        : 'type';
    TYPEDEF_KEYWORD     : 'typedef';
    UNIQUE_KEYWORD      : 'unique';
    UNITS_KEYWORD       : 'units';
    USES_KEYWORD        : 'uses';
    VALUE_KEYWORD       : 'value';
    WHEN_KEYWORD        : 'when';
    YANG_VERSION_KEYWORD: 'yang-version';
    YIN_ELEMENT_KEYWORD : 'yin-element';
    ADD_KEYWORD         : 'add';
    CURRENT_KEYWORD     : 'current';
    DELETE_KEYWORD      : 'delete';
    DEPRECATED_KEYWORD  : 'deprecated';
    FALSE_KEYWORD       : 'false';
    MAX_KEYWORD         : 'max';
    MIN_KEYWORD         : 'min';
    NOT_SUPPORTED_KEYWORD : 'not-supported';
    OBSOLETE_KEYWORD    : 'obsolete';
    REPLACE_KEYWORD     : 'replace';
    SYSTEM_KEYWORD      : 'system';
    TRUE_KEYWORD        : 'true';
    UNBOUNDED_KEYWORD   : 'unbounded';
    USER_KEYWORD        : 'user';
    COMPILER_ANNOTATION_KEYWORD : 'compiler-annotation';

    // Lexer tokens to be skipped
    COMMENT
        :   '/*' .*? '*/'    -> channel(HIDDEN)
        ;
    WS  :   [ \r\t\u000C\n]+ -> channel(HIDDEN)
        ;
    LINE_COMMENT
        : '//' ~[\r\n]* '\r'? '\n' -> channel(HIDDEN)
        ;

    // Additional rules
    INTEGER             : DIGIT+;
    DATE_ARG            : DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT;
    LEFT_CURLY_BRACE    : '{';
    RIGHT_CURLY_BRACE   : '}';
    LEFT_ROUND_BRACE    : '(';
    RIGHT_ROUND_BRACE   : ')';
    ANNOTATION_START    : '@';
    ANNOTATION_IDENTIFIER : ('@')(ALPHA | '_')
                              (ALPHA | DIGIT | '_' | '-' | '.')*;
    IDENTIFIER          : (ALPHA | '_')
                          (ALPHA | DIGIT | '_' | '-' | '.')*;
    STMTEND             : ';';
    DQUOTE              : '"';
    COLON               : ':';
    COMMA               : ',';
    EQUAL               : '=';
    PLUS : '+';
    MINUS: '-';

    STRING : ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' )* ) | SUB_STRING );

    //Fragment rules
    fragment SUB_STRING : ('"' (ESC | ~["])*'"') | ('\'' (ESC | ~['])*'\'') ;
    fragment ESC :  '\\' (["\\/bfnrt] | UNICODE) ;
    fragment UNICODE : 'u' HEX HEX HEX HEX ;
    fragment HEX : [0-9a-fA-F] ;
    fragment ALPHA      : [A-Za-z];
    fragment DIGIT      : [0-9];
    fragment URN        : [u][r][n];
    fragment HTTP       : [h][t][t][p];