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