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) 2006, 2018, Oracle and/or its affiliates. All rights reserved. 22 * Portions Copyright (c) 2017-2018, Chris Fraire <cfraire@me.com>. 23 */ 24 25 /* 26 * Gets Lisp symbols - ignores comments, strings, keywords 27 */ 28 29 package org.opengrok.indexer.analysis.lisp; 30 31 import java.util.Locale; 32 import org.opengrok.indexer.analysis.JFlexSymbolMatcher; 33 %% 34 %public 35 %class LispSymbolTokenizer 36 %extends JFlexSymbolMatcher 37 %unicode 38 %int 39 %include ../CommonLexer.lexh 40 %char 41 42 %{ 43 private int nestedComment; 44 %} 45 46 Identifier = [\-\+\*\!\@\$\%\&\/\?\.\,\:\{\}\=a-zA-Z0-9_\<\>]+ 47 48 %state STRING COMMENT SCOMMENT 49 50 %% 51 52 <YYINITIAL> { 53 {Identifier} {String id = yytext(); 54 if (!Consts.kwd.contains(id.toLowerCase(Locale.ROOT))) { 55 onSymbolMatched(id, yychar); 56 return yystate(); } 57 } 58 \" { yybegin(STRING); } 59 ";" { yybegin(SCOMMENT); } 60 } 61 62 <STRING> { 63 \" { yybegin(YYINITIAL); } 64 \\\\ | \\\" {} 65 } 66 67 <YYINITIAL, COMMENT> { 68 "#|" { yybegin(COMMENT); ++nestedComment; } 69 } 70 71 <COMMENT> { 72 "|#" { if (--nestedComment == 0) { yybegin(YYINITIAL); } } 73 } 74 75 <SCOMMENT> { 76 \n { yybegin(YYINITIAL);} 77 } 78 79 <YYINITIAL, STRING, COMMENT, SCOMMENT> { 80 [^] {} 81 } 82