Bug 5484: Fix of Yang statement lexer
[yangtools.git] / yang / yang-parser-impl / src / main / antlr / YangLexer.g4
1 //
2 // Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3 //
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 // and is available at http://www.eclipse.org/legal/epl-v10.html
7 //
8 lexer grammar YangLexer;
9
10 @header {
11 package org.opendaylight.yangtools.antlrv4.code.gen;
12 }
13
14 tokens{
15     SEMICOLON,
16     LEFT_BRACE,
17     RIGHT_BRACE
18 }
19
20
21 PLUS : '+'-> pushMode(VALUE_MODE);
22 WS : [ \n\r\t] -> skip;
23 LINE_COMMENT :  ('//' (~( '\r' | '\n' )*)) -> skip;
24
25 START_BLOCK_COMMENT : '/*' ->pushMode(BLOCK_COMMENT_MODE), skip ;
26
27
28 SEMICOLON : ';' ->type(SEMICOLON);
29 LEFT_BRACE : '{' ->type(LEFT_BRACE);
30 RIGHT_BRACE : '}' ->type(RIGHT_BRACE);
31
32 YIN_ELEMENT_KEYWORD : 'yin-element'-> pushMode(VALUE_MODE);
33 YANG_VERSION_KEYWORD: 'yang-version'-> pushMode(VALUE_MODE);
34 WHEN_KEYWORD : 'when'-> pushMode(VALUE_MODE);
35 VALUE_KEYWORD : 'value'-> pushMode(VALUE_MODE);
36 USES_KEYWORD : 'uses'-> pushMode(VALUE_MODE);
37 UNITS_KEYWORD : 'units'-> pushMode(VALUE_MODE);
38 UNIQUE_KEYWORD : 'unique'-> pushMode(VALUE_MODE);
39 TYPEDEF_KEYWORD : 'typedef'-> pushMode(VALUE_MODE);
40 TYPE_KEYWORD : 'type'-> pushMode(VALUE_MODE);
41 SUBMODULE_KEYWORD : 'submodule'-> pushMode(VALUE_MODE);
42 STATUS_KEYWORD : 'status'-> pushMode(VALUE_MODE);
43 RPC_KEYWORD : 'rpc'-> pushMode(VALUE_MODE);
44 REVISION_DATE_KEYWORD : 'revision-date'-> pushMode(VALUE_MODE);
45 REVISION_KEYWORD : 'revision'-> pushMode(VALUE_MODE);
46 REQUIRE_INSTANCE_KEYWORD : 'require-instance'-> pushMode(VALUE_MODE);
47 REFINE_KEYWORD : 'refine'-> pushMode(VALUE_MODE);
48 REFERENCE_KEYWORD : 'reference'-> pushMode(VALUE_MODE);
49 RANGE_KEYWORD : 'range'-> pushMode(VALUE_MODE);
50 PRESENCE_KEYWORD : 'presence'-> pushMode(VALUE_MODE);
51 PREFIX_KEYWORD : 'prefix'-> pushMode(VALUE_MODE);
52 POSITION_KEYWORD : 'position'-> pushMode(VALUE_MODE);
53 PATTERN_KEYWORD : 'pattern'-> pushMode(VALUE_MODE);
54 PATH_KEYWORD : 'path'-> pushMode(VALUE_MODE);
55 OUTPUT_KEYWORD : 'output';
56 ORGANIZATION_KEYWORD: 'organization'-> pushMode(VALUE_MODE);
57 ORDERED_BY_KEYWORD : 'ordered-by'-> pushMode(VALUE_MODE);
58 NOTIFICATION_KEYWORD: 'notification'-> pushMode(VALUE_MODE);
59 NAMESPACE_KEYWORD : 'namespace'-> pushMode(VALUE_MODE);
60 MUST_KEYWORD : 'must'-> pushMode(VALUE_MODE);
61 MODULE_KEYWORD : 'module'-> pushMode(VALUE_MODE);
62 MIN_ELEMENTS_KEYWORD : 'min-elements'-> pushMode(VALUE_MODE);
63 MAX_ELEMENTS_KEYWORD : 'max-elements'-> pushMode(VALUE_MODE);
64 MANDATORY_KEYWORD : 'mandatory'-> pushMode(VALUE_MODE);
65 LIST_KEYWORD : 'list'-> pushMode(VALUE_MODE);
66 LENGTH_KEYWORD : 'length'-> pushMode(VALUE_MODE);
67 LEAF_LIST_KEYWORD : 'leaf-list'-> pushMode(VALUE_MODE);
68 LEAF_KEYWORD : 'leaf'-> pushMode(VALUE_MODE);
69 KEY_KEYWORD : 'key'-> pushMode(VALUE_MODE);
70 INPUT_KEYWORD : 'input';
71 INCLUDE_KEYWORD : 'include'-> pushMode(VALUE_MODE);
72 IMPORT_KEYWORD : 'import'-> pushMode(VALUE_MODE);
73 IF_FEATURE_KEYWORD : 'if-feature'-> pushMode(VALUE_MODE);
74 IDENTITY_KEYWORD : 'identity'-> pushMode(VALUE_MODE);
75 GROUPING_KEYWORD : 'grouping'-> pushMode(VALUE_MODE);
76 FRACTION_DIGITS_KEYWORD : 'fraction-digits'-> pushMode(VALUE_MODE);
77 FEATURE_KEYWORD : 'feature'-> pushMode(VALUE_MODE);
78 DEVIATE_KEYWORD : 'deviate'-> pushMode(VALUE_MODE);
79 DEVIATION_KEYWORD : 'deviation'-> pushMode(VALUE_MODE);
80 EXTENSION_KEYWORD : 'extension'-> pushMode(VALUE_MODE);
81 ERROR_MESSAGE_KEYWORD : 'error-message'-> pushMode(VALUE_MODE);
82 ERROR_APP_TAG_KEYWORD : 'error-app-tag'-> pushMode(VALUE_MODE);
83 ENUM_KEYWORD : 'enum'-> pushMode(VALUE_MODE);
84 DESCRIPTION_KEYWORD : 'description'-> pushMode(VALUE_MODE);
85 DEFAULT_KEYWORD : 'default'-> pushMode(VALUE_MODE);
86 CONTAINER_KEYWORD : 'container'-> pushMode(VALUE_MODE);
87 CONTACT_KEYWORD : 'contact'-> pushMode(VALUE_MODE);
88 CONFIG_KEYWORD : 'config'-> pushMode(VALUE_MODE);
89 CHOICE_KEYWORD: 'choice'-> pushMode(VALUE_MODE);
90 CASE_KEYWORD : 'case'-> pushMode(VALUE_MODE);
91 BIT_KEYWORD : 'bit'-> pushMode(VALUE_MODE);
92 BELONGS_TO_KEYWORD : 'belongs-to'-> pushMode(VALUE_MODE);
93 BASE_KEYWORD : 'base'-> pushMode(VALUE_MODE);
94 AUGMENT_KEYWORD : 'augment'-> pushMode(VALUE_MODE);
95 ARGUMENT_KEYWORD : 'argument'-> pushMode(VALUE_MODE);
96 ANYXML_KEYWORD : 'anyxml'-> pushMode(VALUE_MODE);
97
98 IDENTIFIER : [/.a-zA-Z_0-9\-][a-zA-Z0-9_\-.:]* -> pushMode(VALUE_MODE);
99
100 mode VALUE_MODE;
101
102 fragment ESC :  '\\' (["\\/bfnrt] | UNICODE) ;
103 fragment UNICODE : 'u' HEX HEX HEX HEX ;
104 fragment HEX : [0-9a-fA-F] ;
105           
106 END_IDENTIFIER_SEMICOLON : ';' -> type(SEMICOLON),popMode;
107 END_IDENTIFIER_LEFT_BRACE : '{' ->type(LEFT_BRACE), popMode;
108
109 START_INNER_BLOCK_COMMENT : '/*' ->pushMode(BLOCK_COMMENT_MODE), skip ;
110
111 fragment SUB_STRING : ('"' (ESC | ~["])*'"') | ('\'' (ESC | ~['])*'\'') ;
112
113 STRING: ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' )* ) | SUB_STRING ) ->popMode;// IDENTIFIER ;
114 S : [ \n\r\t] -> skip;    
115
116 mode BLOCK_COMMENT_MODE;
117 END_BLOCK_COMMENT : '*/' -> popMode,skip;
118 BLOCK_COMMENT :  . ->more,skip;