xref: /OpenGrok/opengrok-indexer/src/main/jflex/analysis/verilog/VerilogProductions.lexh (revision d219b4cea555a12b602d2d5518daa22134ad4879)
1*d219b4ceSAdam Hornacek/*
2*d219b4ceSAdam Hornacek * CDDL HEADER START
3*d219b4ceSAdam Hornacek *
4*d219b4ceSAdam Hornacek * The contents of this file are subject to the terms of the
5*d219b4ceSAdam Hornacek * Common Development and Distribution License (the "License").
6*d219b4ceSAdam Hornacek * You may not use this file except in compliance with the License.
7*d219b4ceSAdam Hornacek *
8*d219b4ceSAdam Hornacek * See LICENSE.txt included in this distribution for the specific
9*d219b4ceSAdam Hornacek * language governing permissions and limitations under the License.
10*d219b4ceSAdam Hornacek *
11*d219b4ceSAdam Hornacek * When distributing Covered Code, include this CDDL HEADER in each
12*d219b4ceSAdam Hornacek * file and include the License file at LICENSE.txt.
13*d219b4ceSAdam Hornacek * If applicable, add the following below this CDDL HEADER, with the
14*d219b4ceSAdam Hornacek * fields enclosed by brackets "[]" replaced with your own identifying
15*d219b4ceSAdam Hornacek * information: Portions Copyright [yyyy] [name of copyright owner]
16*d219b4ceSAdam Hornacek *
17*d219b4ceSAdam Hornacek * CDDL HEADER END
18*d219b4ceSAdam Hornacek */
19*d219b4ceSAdam Hornacek
20*d219b4ceSAdam Hornacek/*
21*d219b4ceSAdam Hornacek * Copyright (c) 2019, Chris Fraire <cfraire@me.com>.
22*d219b4ceSAdam Hornacek */
23*d219b4ceSAdam Hornacek
24*d219b4ceSAdam HornacekIdentifierAnyChar = [A-Za-z_$0-9]
25*d219b4ceSAdam HornacekCompilerDirective = \` [A-Za-z_]+
26*d219b4ceSAdam HornacekEscapedIdentifier = \\[^\s]+
27*d219b4ceSAdam HornacekSimpleIdentifier = [A-Za-z_] {IdentifierAnyChar}*
28*d219b4ceSAdam HornacekSystemTaskFunctionIdentifier = "$" {IdentifierAnyChar}+
29*d219b4ceSAdam Hornacek
30*d219b4ceSAdam HornacekNumber = {Sign}? ({Integer} | {Real})
31*d219b4ceSAdam HornacekInteger = ({Decimal_integer} | {Hexadecimal} | {Binary} | {Octal})
32*d219b4ceSAdam HornacekDecimal_integer = ({UnsignedNumber} |
33*d219b4ceSAdam Hornacek        {NzUnsignedNumber}? {DecimalBase} ({UnsignedNumber} | [XxZz\?]) _*)
34*d219b4ceSAdam HornacekHexadecimal = {Size}? {HexBase} {HEXDIG} ("_" | {HEXDIG})*
35*d219b4ceSAdam HornacekBinary = {Size}? {BinaryBase} {BINDIG} ("_" | {BINDIG})*
36*d219b4ceSAdam HornacekOctal = {Size}? {OctalBase} {OCTDIG} ("_" | {OCTDIG})*
37*d219b4ceSAdam HornacekReal = ({FixedPointNumber} |
38*d219b4ceSAdam Hornacek        {UnsignedNumber} ("." {UnsignedNumber})? [Ee] {Sign}? {UnsignedNumber})
39*d219b4ceSAdam HornacekUnbasedUnsized = \' [01XxZz]
40*d219b4ceSAdam HornacekTime = ({UnsignedNumber} | {FixedPointNumber})
41*d219b4ceSAdam Hornacek        ("s" | "fs" | "ms" | "ns" | "ps" | "us")
42*d219b4ceSAdam HornacekUnsignedNumber = {DIGIT} ("_" | {DIGIT})*
43*d219b4ceSAdam HornacekNzUnsignedNumber = [1-9] ("_" | {DIGIT})*
44*d219b4ceSAdam HornacekFixedPointNumber = {UnsignedNumber} "." {UnsignedNumber}
45*d219b4ceSAdam HornacekBasePrefix = \' [Ss]?
46*d219b4ceSAdam HornacekDecimalBase = {BasePrefix} [Dd]
47*d219b4ceSAdam HornacekHexBase =     {BasePrefix} [Hh]
48*d219b4ceSAdam HornacekBinaryBase =  {BasePrefix} [Bb]
49*d219b4ceSAdam HornacekOctalBase =   {BasePrefix} [Oo]
50*d219b4ceSAdam HornacekDIGIT = [0-9]
51*d219b4ceSAdam HornacekHEXDIG = [0-9a-fA-FXxZz\?]
52*d219b4ceSAdam HornacekBINDIG = [01XxZz\?]
53*d219b4ceSAdam HornacekOCTDIG = [0-7XxZz\?]
54*d219b4ceSAdam HornacekSize = {NzUnsignedNumber}
55*d219b4ceSAdam HornacekSign = [\+\-]
56*d219b4ceSAdam Hornacek
57*d219b4ceSAdam HornacekDelay = "#" ({UnsignedNumber} | {Real} | {Time} | "1step")
58*d219b4ceSAdam Hornacek
59*d219b4ceSAdam Hornacek/*
60*d219b4ceSAdam Hornacek * COMMENT : block comment
61*d219b4ceSAdam Hornacek * SCOMMENT : single-line comment
62*d219b4ceSAdam Hornacek * STRING : string literal
63*d219b4ceSAdam Hornacek */
64*d219b4ceSAdam Hornacek%state COMMENT SCOMMENT STRING
65*d219b4ceSAdam Hornacek
66*d219b4ceSAdam Hornacek%%
67*d219b4ceSAdam Hornacek<YYINITIAL> {
68*d219b4ceSAdam Hornacek    {SimpleIdentifier} | {SystemTaskFunctionIdentifier} |
69*d219b4ceSAdam Hornacek            {CompilerDirective}    {
70*d219b4ceSAdam Hornacek        chkLOC();
71*d219b4ceSAdam Hornacek        if (offerSymbol(yytext(), 0, false) && returnOnSymbol()) {
72*d219b4ceSAdam Hornacek            return yystate();
73*d219b4ceSAdam Hornacek        }
74*d219b4ceSAdam Hornacek    }
75*d219b4ceSAdam Hornacek
76*d219b4ceSAdam Hornacek    {EscapedIdentifier}    {
77*d219b4ceSAdam Hornacek        chkLOC();
78*d219b4ceSAdam Hornacek        String id = yytext().substring(1);
79*d219b4ceSAdam Hornacek        offer("\\");
80*d219b4ceSAdam Hornacek        if (offerSymbol(id, 1, true) && returnOnSymbol()) {
81*d219b4ceSAdam Hornacek            return yystate();
82*d219b4ceSAdam Hornacek        }
83*d219b4ceSAdam Hornacek    }
84*d219b4ceSAdam Hornacek
85*d219b4ceSAdam Hornacek    {Number} | {UnbasedUnsized} | {Time} | {Delay}    {
86*d219b4ceSAdam Hornacek        chkLOC();
87*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.NUMBER_CLASS, yychar);
88*d219b4ceSAdam Hornacek        offer(yytext());
89*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
90*d219b4ceSAdam Hornacek    }
91*d219b4ceSAdam Hornacek
92*d219b4ceSAdam Hornacek    "/*"    {
93*d219b4ceSAdam Hornacek        yypush(COMMENT);
94*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
95*d219b4ceSAdam Hornacek        offer(yytext());
96*d219b4ceSAdam Hornacek    }
97*d219b4ceSAdam Hornacek
98*d219b4ceSAdam Hornacek    "//"    {
99*d219b4ceSAdam Hornacek        yypush(SCOMMENT);
100*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
101*d219b4ceSAdam Hornacek        offer(yytext());
102*d219b4ceSAdam Hornacek    }
103*d219b4ceSAdam Hornacek
104*d219b4ceSAdam Hornacek    \"    {
105*d219b4ceSAdam Hornacek        chkLOC();
106*d219b4ceSAdam Hornacek        yypush(STRING);
107*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
108*d219b4ceSAdam Hornacek        offer(yytext());
109*d219b4ceSAdam Hornacek    }
110*d219b4ceSAdam Hornacek}
111*d219b4ceSAdam Hornacek
112*d219b4ceSAdam Hornacek<COMMENT> {
113*d219b4ceSAdam Hornacek    /*
114*d219b4ceSAdam Hornacek     * Nesting of block comments is not recognized by SystemVerilog.
115*d219b4ceSAdam Hornacek     */
116*d219b4ceSAdam Hornacek
117*d219b4ceSAdam Hornacek    "*/"    {
118*d219b4ceSAdam Hornacek        offer(yytext());
119*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
120*d219b4ceSAdam Hornacek        yypop();
121*d219b4ceSAdam Hornacek    }
122*d219b4ceSAdam Hornacek
123*d219b4ceSAdam Hornacek    {WhspChar}*{EOL}    {
124*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
125*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
126*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
127*d219b4ceSAdam Hornacek    }
128*d219b4ceSAdam Hornacek}
129*d219b4ceSAdam Hornacek
130*d219b4ceSAdam Hornacek<SCOMMENT> {
131*d219b4ceSAdam Hornacek    {WhspChar}*{EOL}    {
132*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
133*d219b4ceSAdam Hornacek        yypop();
134*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
135*d219b4ceSAdam Hornacek    }
136*d219b4ceSAdam Hornacek}
137*d219b4ceSAdam Hornacek
138*d219b4ceSAdam Hornacek<STRING> {
139*d219b4ceSAdam Hornacek    \"    {
140*d219b4ceSAdam Hornacek        chkLOC();
141*d219b4ceSAdam Hornacek        offer(yytext());
142*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
143*d219b4ceSAdam Hornacek        yypop();
144*d219b4ceSAdam Hornacek    }
145*d219b4ceSAdam Hornacek
146*d219b4ceSAdam Hornacek    \\[\"\\]    {
147*d219b4ceSAdam Hornacek        chkLOC();
148*d219b4ceSAdam Hornacek        offer(yytext());
149*d219b4ceSAdam Hornacek    }
150*d219b4ceSAdam Hornacek
151*d219b4ceSAdam Hornacek    {WhspChar}*{EOL}    {
152*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
153*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
154*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
155*d219b4ceSAdam Hornacek    }
156*d219b4ceSAdam Hornacek}
157*d219b4ceSAdam Hornacek
158*d219b4ceSAdam Hornacek<YYINITIAL, COMMENT, SCOMMENT, STRING> {
159*d219b4ceSAdam Hornacek    {WhspChar}*{EOL}    {
160*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
161*d219b4ceSAdam Hornacek    }
162*d219b4ceSAdam Hornacek
163*d219b4ceSAdam Hornacek    \s    {
164*d219b4ceSAdam Hornacek        offer(yytext());
165*d219b4ceSAdam Hornacek    }
166*d219b4ceSAdam Hornacek
167*d219b4ceSAdam Hornacek    [^]    {
168*d219b4ceSAdam Hornacek        chkLOC();
169*d219b4ceSAdam Hornacek        offer(yytext());
170*d219b4ceSAdam Hornacek    }
171*d219b4ceSAdam Hornacek}
172*d219b4ceSAdam Hornacek
173*d219b4ceSAdam Hornacek<COMMENT, SCOMMENT, STRING> {
174*d219b4ceSAdam Hornacek    {BrowseableURI}    {
175*d219b4ceSAdam Hornacek        chkLOC();
176*d219b4ceSAdam Hornacek        if (takeAllContent()) {
177*d219b4ceSAdam Hornacek            onUriMatched(yytext(), yychar);
178*d219b4ceSAdam Hornacek        }
179*d219b4ceSAdam Hornacek    }
180*d219b4ceSAdam Hornacek}
181