33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist/*
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * CDDL HEADER START
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist *
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * The contents of this file are subject to the terms of the
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * Common Development and Distribution License (the "License").
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * You may not use this file except in compliance with the License.
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist *
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * See LICENSE.txt included in this distribution for the specific
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * language governing permissions and limitations under the License.
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist *
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * When distributing Covered Code, include this CDDL HEADER in each
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * file and include the License file at LICENSE.txt.
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * If applicable, add the following below this CDDL HEADER, with the
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * fields enclosed by brackets "[]" replaced with your own identifying
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * information: Portions Copyright [yyyy] [name of copyright owner]
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist *
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * CDDL HEADER END
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist */
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist/*
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist */
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist/*
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * Get Golang symbols - ignores comments, strings, keywords
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist */
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquistpackage org.opensolaris.opengrok.analysis.golang;
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquistimport org.opensolaris.opengrok.analysis.JFlexTokenizer;
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist/**
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist * @author Patrick Lundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist */
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%%
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%public
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%class GolangSymbolTokenizer
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%extends JFlexTokenizer
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%unicode
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%init{
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquistsuper(in);
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%init}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%type boolean
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%eofval{
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquistreturn false;
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%eofval}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%char
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquistIdentifier = [a-zA-Z_] [a-zA-Z0-9_']*
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%state STRING COMMENT SCOMMENT QSTRING
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist%%
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<YYINITIAL> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist {Identifier} {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist String id = yytext();
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist if (!Consts.kwd.contains(id)) {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist setAttribs(id, yychar, yychar + yylength());
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist return true;
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \" { yybegin(STRING); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \' { yybegin(QSTRING); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist "/*" { yybegin(COMMENT); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist "//" { yybegin(SCOMMENT); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<STRING> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \" { yybegin(YYINITIAL); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \\\\ | \\\" {}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<QSTRING> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \' { yybegin(YYINITIAL); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<COMMENT> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist "*/" { yybegin(YYINITIAL); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<SCOMMENT> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist \n { yybegin(YYINITIAL); }
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<YYINITIAL, STRING, COMMENT, SCOMMENT, QSTRING> {
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist<<EOF>> { this.finalOffset = zzEndRead; return false;}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist[^] {}
33a28b94ce2e89da8d1ca8d1b7c517907c141606patricklundquist}