blob: 12bb19bdb382a576d214ddb171776d326b745995 [file] [log] [blame]
/*
* Copyright 2016 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';
// 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 : '}';
IDENTIFIER : (ALPHA | '_')
(ALPHA | DIGIT | '_' | '-' | '.')*;
STMTEND : ';';
DQUOTE : '"';
COLON : ':';
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];