1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * See LICENSE.txt included in this distribution for the specific 9 * language governing permissions and limitations under the License. 10 * 11 * When distributing Covered Code, include this CDDL HEADER in each 12 * file and include the License file at LICENSE.txt. 13 * If applicable, add the following below this CDDL HEADER, with the 14 * fields enclosed by brackets "[]" replaced with your own identifying 15 * information: Portions Copyright [yyyy] [name of copyright owner] 16 * 17 * CDDL HEADER END 18 */ 19 20 /* 21 * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved. 22 * Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>. 23 */ 24 25 /* 26 * Gets C symbols - ignores comments, strings, keywords 27 */ 28 29 package org.opengrok.indexer.analysis.c; 30 31 import org.opengrok.indexer.analysis.JFlexSymbolMatcher; 32 %% 33 %public 34 %class CSymbolTokenizer 35 %extends JFlexSymbolMatcher 36 %unicode 37 %int 38 %include ../CommonLexer.lexh 39 %char 40 41 %state STRING COMMENT SCOMMENT QSTRING 42 43 %include ../Common.lexh 44 %include C.lexh 45 %% 46 47 <YYINITIAL> { 48 {Identifier} {String id = yytext(); 49 if(!Consts.kwd.contains(id)) { 50 onSymbolMatched(id, yychar); 51 return yystate(); } 52 } 53 54 "#" {WhspChar}* "include" {WhspChar}* ("<"[^>\n\r]+">" | \"[^\"\n\r]+\") {} 55 56 {Number} {} 57 58 \\\" | \\\' {} 59 \" { yybegin(STRING); } 60 \' { yybegin(QSTRING); } 61 "/*" { yybegin(COMMENT); } 62 "//" { yybegin(SCOMMENT); } 63 } 64 65 <STRING> { 66 \\[\"\\] {} 67 \" { yybegin(YYINITIAL); } 68 } 69 70 <QSTRING> { 71 \\[\'\\] {} 72 \' { yybegin(YYINITIAL); } 73 } 74 75 <COMMENT> { 76 "*/" { yybegin(YYINITIAL);} 77 } 78 79 <SCOMMENT> { 80 {EOL} { yybegin(YYINITIAL); } 81 } 82 83 <YYINITIAL, STRING, COMMENT, SCOMMENT, QSTRING> { 84 {WhspChar}+ {} 85 [^] {} 86 } 87