blob: 8abe32fefdd4c8adcf44072efe3049ebe7734857 [file] [log] [blame]
Vidyashree Ramada621502016-02-05 22:32:34 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Vidyashree Ramada621502016-02-05 22:32:34 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18 * This is a YANG grammar for lexer based on which ANTLR will generate YANG lexer.
19 */
20
21lexer grammar YangLexer;
22
23 // Statements keywords
24 ANYXML_KEYWORD : 'anyxml';
25 ARGUMENT_KEYWORD : 'argument';
26 AUGMENT_KEYWORD : 'augment';
27 BASE_KEYWORD : 'base';
28 BELONGS_TO_KEYWORD : 'belongs-to';
29 BIT_KEYWORD : 'bit';
30 CASE_KEYWORD : 'case';
31 CHOICE_KEYWORD : 'choice';
32 CONFIG_KEYWORD : 'config';
33 CONTACT_KEYWORD : 'contact';
34 CONTAINER_KEYWORD : 'container';
35 DEFAULT_KEYWORD : 'default';
36 DESCRIPTION_KEYWORD : 'description';
37 ENUM_KEYWORD : 'enum';
38 ERROR_APP_TAG_KEYWORD : 'error-app-tag';
39 ERROR_MESSAGE_KEYWORD : 'error-message';
40 EXTENSION_KEYWORD : 'extension';
41 DEVIATION_KEYWORD : 'deviation';
42 DEVIATE_KEYWORD : 'deviate';
43 FEATURE_KEYWORD : 'feature';
44 FRACTION_DIGITS_KEYWORD : 'fraction-digits';
45 GROUPING_KEYWORD : 'grouping';
46 IDENTITY_KEYWORD : 'identity';
47 IF_FEATURE_KEYWORD : 'if-feature';
48 IMPORT_KEYWORD : 'import';
49 INCLUDE_KEYWORD : 'include';
50 INPUT_KEYWORD : 'input';
51 KEY_KEYWORD : 'key';
52 LEAF_KEYWORD : 'leaf';
53 LEAF_LIST_KEYWORD : 'leaf-list';
54 LENGTH_KEYWORD : 'length';
55 LIST_KEYWORD : 'list';
56 MANDATORY_KEYWORD : 'mandatory';
57 MAX_ELEMENTS_KEYWORD : 'max-elements';
58 MIN_ELEMENTS_KEYWORD : 'min-elements';
59 MODULE_KEYWORD : 'module';
60 MUST_KEYWORD : 'must';
61 NAMESPACE_KEYWORD : 'namespace';
62 NOTIFICATION_KEYWORD: 'notification';
63 ORDERED_BY_KEYWORD : 'ordered-by';
64 ORGANIZATION_KEYWORD: 'organization';
65 OUTPUT_KEYWORD : 'output';
66 PATH_KEYWORD : 'path';
67 PATTERN_KEYWORD : 'pattern';
68 POSITION_KEYWORD : 'position';
69 PREFIX_KEYWORD : 'prefix';
70 PRESENCE_KEYWORD : 'presence';
71 RANGE_KEYWORD : 'range';
72 REFERENCE_KEYWORD : 'reference';
73 REFINE_KEYWORD : 'refine';
74 REQUIRE_INSTANCE_KEYWORD : 'require-instance';
75 REVISION_KEYWORD : 'revision';
76 REVISION_DATE_KEYWORD : 'revision-date';
77 RPC_KEYWORD : 'rpc';
78 STATUS_KEYWORD : 'status';
79 SUBMODULE_KEYWORD : 'submodule';
80 TYPE_KEYWORD : 'type';
81 TYPEDEF_KEYWORD : 'typedef';
82 UNIQUE_KEYWORD : 'unique';
83 UNITS_KEYWORD : 'units';
84 USES_KEYWORD : 'uses';
85 VALUE_KEYWORD : 'value';
86 WHEN_KEYWORD : 'when';
87 YANG_VERSION_KEYWORD: 'yang-version';
88 YIN_ELEMENT_KEYWORD : 'yin-element';
89 ADD_KEYWORD : 'add';
90 CURRENT_KEYWORD : 'current';
91 DELETE_KEYWORD : 'delete';
92 DEPRECATED_KEYWORD : 'deprecated';
93 FALSE_KEYWORD : 'false';
94 MAX_KEYWORD : 'max';
95 MIN_KEYWORD : 'min';
96 NOT_SUPPORTED_KEYWORD : 'not-supported';
97 OBSOLETE_KEYWORD : 'obsolete';
98 REPLACE_KEYWORD : 'replace';
99 SYSTEM_KEYWORD : 'system';
100 TRUE_KEYWORD : 'true';
101 UNBOUNDED_KEYWORD : 'unbounded';
102 USER_KEYWORD : 'user';
Vidyashree Rama528ef302016-06-30 14:31:18 +0530103 COMPILER_ANNOTATION_KEYWORD : 'compiler-annotation';
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530104 COMPILER_ANNOTATION : IDENTIFIER COLON COMPILER_ANNOTATION_KEYWORD;
105 APP_DATA_STRUCTURE_KEYWORD : 'app-data-structure';
106 APP_DATA_STRUCTURE : IDENTIFIER COLON APP_DATA_STRUCTURE_KEYWORD;
107 DATA_STRUCTURE_KEYWORD : 'data-structure';
108 DATA_STRUCTURE : IDENTIFIER COLON DATA_STRUCTURE_KEYWORD;
109 DATA_STRUCTURE_KEY : IDENTIFIER COLON KEY_KEYWORD;
110 APP_EXTENDED_KEYWORD : 'app-extended-name';
111 APP_EXTENDED : IDENTIFIER COLON APP_EXTENDED_KEYWORD;
Vidyashree Ramada621502016-02-05 22:32:34 +0530112
113 // Lexer tokens to be skipped
114 COMMENT
115 : '/*' .*? '*/' -> channel(HIDDEN)
116 ;
117 WS : [ \r\t\u000C\n]+ -> channel(HIDDEN)
118 ;
119 LINE_COMMENT
120 : '//' ~[\r\n]* '\r'? '\n' -> channel(HIDDEN)
121 ;
122
123 // Additional rules
124 INTEGER : DIGIT+;
125 DATE_ARG : DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT;
126 LEFT_CURLY_BRACE : '{';
127 RIGHT_CURLY_BRACE : '}';
128 IDENTIFIER : (ALPHA | '_')
129 (ALPHA | DIGIT | '_' | '-' | '.')*;
130 STMTEND : ';';
131 DQUOTE : '"';
132 COLON : ':';
Vidyashree Ramada621502016-02-05 22:32:34 +0530133 PLUS : '+';
134 MINUS: '-';
135
136 STRING : ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' )* ) | SUB_STRING );
137
138 //Fragment rules
139 fragment SUB_STRING : ('"' (ESC | ~["])*'"') | ('\'' (ESC | ~['])*'\'') ;
140 fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ;
141 fragment UNICODE : 'u' HEX HEX HEX HEX ;
142 fragment HEX : [0-9a-fA-F] ;
143 fragment ALPHA : [A-Za-z];
144 fragment DIGIT : [0-9];
145 fragment URN : [u][r][n];
146 fragment HTTP : [h][t][t][p];