⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sbrowser.l

📁 这是一个Linux下的集成开发环境
💻 L
字号:
/*Copyright (c) 2000, Red Hat, Inc.This file is part of Source-Navigator.Source-Navigator is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public License as publishedby the Free Software Foundation; either version 2, or (at your option)any later version.Source-Navigator is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public License alongwith Source-Navigator; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330, Boston,MA 02111-1307, USA.*/%{/* * sbrowser.l * * Copyright (C) 1998 Cygnus Solutions * * Description: * A lex specification for a scanner to parse sendmail configuration files * and store relevant information into the Source-Navigator project database. */#include <ctype.h>#include "lexinput.h"#include "tcl.h"#include "snptools.h"static char group[] = "sendmail";static char *p;			/* a general purpose pointer */static unsigned short flag = 0;static char ruleset[512] = "";#undef yywrap#define	YY_SKIP_YYWRAP	1#undef YY_INPUT#define YY_INPUT(buf,r,ms) (r = sn_encoded_input(buf, ms)) intyywrap(){   if (flag)   {      long line = sn_pop_line();      sn_insert_symbol(SN_SUBR_DEF, NULL, ruleset, sn_current_file(),                       line, 0, sn_line(), 0, 0, NULL, NULL, NULL,		       NULL, line, 0, line, strlen(ruleset));      flag = 0;   }   return(1);}   %}%x RULE%%^#.*\n {			/* a comment */  yytext[yyleng - 1] = '\0';  sn_insert_comment(NULL, ruleset, sn_current_file(), yytext,		    sn_line(), sn_column());    sn_advance_line();  sn_reset_column();}^M.*,.*\n {  p = strchr(yytext, ',');  *p = '\0';  p = yytext + 1;  sn_insert_symbol(SN_FUNC_DEF, NULL, p, sn_current_file(),		   sn_line(), sn_column() + 1, sn_line(), 		   sn_column() + strlen(p), 0, NULL, NULL, NULL, NULL,		   sn_line(), sn_column() + 1, sn_line(),		   sn_column() + strlen(p) + 1);  sn_advance_line();  sn_reset_column();}  ^[CD].*\n {  char buf[2] = { 0, 0 };    buf[0] = yytext[1];    sn_insert_symbol(SN_MACRO_DEF, NULL, buf, sn_current_file(),                   sn_line(), 1, sn_line(), 2, 0, NULL, NULL, NULL,                   NULL, sn_line(), 1, sn_line(), 2);  sn_advance_line();  sn_reset_column();}^F\{.*\}.*\n {  char * filename;  unsigned margin;  p = strchr(yytext, '\n');  *p = '\0';  p = sn_afterlastwspace(yytext);  margin = p - yytext;  filename = ckalloc(strlen(p) + 1);  strcpy(filename, p);  p = strchr(yytext, '}') + 1;  *p = '\0';  p = yytext + 1; /* jump over `F' */  sn_insert_symbol(SN_MACRO_DEF, NULL, p, sn_current_file(),		   sn_line(), sn_column() + 1, sn_line(),		   sn_column() + 1 + strlen(p), 0,		   NULL, NULL, NULL, NULL, sn_line(), sn_column() + 1,		   sn_line(), sn_column() + 1 + strlen(p));   /* need to include an include db entry too */  sn_insert_symbol(SN_INCLUDE_DEF, NULL, filename, sn_current_file(),		   sn_line(), sn_column() + margin, sn_line(), yyleng - 1, 0,		   NULL, NULL, NULL, NULL, sn_line(), sn_column() + margin,		   sn_line(), yyleng - 1);  sn_advance_line();  sn_reset_column();  ckfree(filename);}^F.*\n {  unsigned margin;  char * filename;  char buf[2] = { 0, 0 };  p = strchr(yytext, '\n');  *p = '\0';  buf[0] = yytext[1];  filename = sn_afterlastwspace(yytext);  sn_insert_symbol(SN_MACRO_DEF, NULL, buf, sn_current_file(),		   sn_line(), sn_column() + 1, sn_line(), sn_column() + 2, 0,		   NULL, NULL, NULL, NULL, sn_line(), sn_column() + 1,		   sn_line(), sn_column() + 2);  margin = filename - yytext;  /* need to include an include db entry too */  sn_insert_symbol(SN_INCLUDE_DEF, NULL, filename, sn_current_file(),		   sn_line(), sn_column() + margin, sn_line(), yyleng - 1, 0,		   NULL, NULL, NULL, NULL, sn_line(), sn_column() + margin,		   sn_line(), yyleng - 1);   sn_advance_line();  sn_reset_column();}^S.*\n {  if (flag)  {    long line = sn_pop_line();    sn_insert_symbol(SN_SUBR_DEF, NULL, ruleset, sn_current_file(),                     line, 0, sn_line(), 0, 0, NULL, NULL, NULL,		     NULL, line, 0, line, strlen(ruleset));    flag = 0;  }  sn_push_line();  p = strchr(yytext, '\n');  *p = '\0';  p = yytext;  while (*p != ' ' && *p != '\t') { p++; }  while (*p == ' ' || *p == '\t') { p++; }    /* go back one position */  p--;  *p = 'S';   strcpy(ruleset, yytext);  flag = 1;  sn_advance_line();  sn_reset_column();}^R {  sn_advance_column(yyleng);  BEGIN(RULE);}<RULE>$#.*[ \t] {  p = yytext;  while (*p != ' ' && *p != '\t') { p++; }  *p = '\0';  sn_insert_xref(SN_REF_TO_FUNCTION, SN_SUBR_DEF, SN_REF_SCOPE_GLOBAL,		 NULL, ruleset, NULL, NULL, &yytext[2], NULL, sn_current_file(),		 sn_line(), SN_REF_PASS);  sn_advance_column(yyleng); }<RULE>$=?[a-zA-Z] {  p = yytext + 1;  if (*p == '=') { p++; }  sn_insert_xref(SN_REF_TO_DEFINE, SN_SUBR_DEF, SN_REF_SCOPE_GLOBAL,		 NULL, ruleset, NULL, NULL, p, NULL, sn_current_file(),		 sn_line(), SN_REF_READ);  sn_advance_column(yyleng);}<RULE>$=\{.*\} {  p = yytext + 1;  if (*p == '=') { p++; }  sn_insert_xref(SN_REF_TO_DEFINE, SN_SUBR_DEF, SN_REF_SCOPE_GLOBAL,		 NULL, ruleset, NULL, NULL, p, NULL, sn_current_file(),		 sn_line(), SN_REF_READ);  sn_advance_column(yyleng);}<RULE>$\>[0-9]+ {  p = strchr(yytext, '>');  *p = 'S';			/* we know this for sure */  sn_insert_xref(SN_REF_TO_SUBROUTINE, SN_SUBR_DEF, SN_REF_SCOPE_GLOBAL,		 NULL, ruleset, NULL, NULL, p, NULL, sn_current_file(),		 sn_line(), SN_REF_PASS);  sn_advance_column(yyleng);}<RULE>\n {  sn_advance_line();  sn_reset_column();  BEGIN(INITIAL);}  <RULE>. { /* eat whitespace */  sn_advance_column(yyleng);}\n {   sn_advance_line();   sn_reset_column();}\r ;. { sn_advance_column(yyleng); }%%voidreset(){   sn_reset_line();   sn_reset_column();   sn_reset_encoding();}intmain(int argc, char *argv[]){   return sn_main(argc, argv, group, &yyin, yylex, reset);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -