summaryrefslogtreecommitdiffstats
path: root/trunk/src/declinfo.l
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/declinfo.l')
-rw-r--r--trunk/src/declinfo.l357
1 files changed, 0 insertions, 357 deletions
diff --git a/trunk/src/declinfo.l b/trunk/src/declinfo.l
deleted file mode 100644
index 746aaae..0000000
--- a/trunk/src/declinfo.l
+++ /dev/null
@@ -1,357 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-//#include <iostream.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "declinfo.h"
-#include "util.h"
-#include "message.h"
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-
-static const char * inputString;
-static int inputPosition;
-static QCString scope;
-static QCString className;
-static QCString classTempList;
-static QCString funcTempList;
-static QCString type;
-static QCString name;
-static QCString args;
-static QCString tmpType;
-static int sharpCount;
-static bool classTempListFound;
-static bool funcTempListFound;
-static QCString exceptionString;
-static bool insideObjC;
-
-static void addType()
-{
- //printf("addType() type=`%s' scope=`%s' name=`%s'\n",
- // type.data(),scope.data(),name.data());
- if (name.isEmpty() && scope.isEmpty()) return;
- if (!type.isEmpty()) type+=" ";
- if (!scope.isEmpty()) type+=scope+"::";
- type+=name;
- scope.resize(0);
- name.resize(0);
-}
-
-static void addTypeName()
-{
- //printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
- // type.data(),scope.data(),name.data());
- if (name.isEmpty() ||
- name.at(name.length()-1)==':') // end of Objective-C keyword => append to name not type
- {
- return;
- }
- if (!type.isEmpty()) type+=' ';
- type+=name;
- name.resize(0);
-}
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-B [ \t]
-ID "$"?([a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*)|(@[0-9]+)
-
-%option nounput
-%option noyywrap
-
-%x Start
-%x Template
-%x ReadArgs
-%x Operator
-%x FuncPtr
-%x EndTemplate
-%x StripTempArgs
-%x SkipSharp
-%x ReadExceptions
-
-%%
-
-<Start>"operator"/({B}*"["{B}*"]")* { // operator rule must be before {ID} rule
- name += yytext;
- BEGIN(Operator);
- }
-<Start>{ID}{B}*"("{B}*{ID}{B}*")" { // Objective-C class categories
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- name += yytext;
- }
- }
-<Start>([~!]{B}*)?{ID}/({B}*"["{B}*"]")* { // the []'s are for Java,
- // the / was add to deal with multi-
- // dimensional C++ arrays like A[][15]
- // the leading ~ is for a destructor
- // the leading ! is for a C++/CLI finalizer (see bug 456475 and 635198)
- addTypeName();
- name += yytext;
- }
-<Start>{B}*"::"{B}* { // found a scope specifier
- if (!scope.isEmpty())
- {
- scope+="::"+name; // add name to scope
- }
- else
- {
- scope = name.copy(); // scope becomes name
- }
- name.resize(0);
- }
-<Start>{B}*":" { // Objective-C argument separator
- name+=yytext;
- }
-<Start>[*&]+ {
- addType();
- type+=yytext;
- }
-<Start>{B}+ {
- addType();
- }
-<Start>{B}*"("({ID}"::")*{B}*[&*]({B}*("const"|"volatile"){B}+)? {
- addType();
- QCString text=yytext;
- type+=text.stripWhiteSpace();
- }
-<Start>{B}*")" {
- type+=")";
- }
-<Start>{B}*"(" { // TODO: function pointers
- args+="(";
- BEGIN(ReadArgs);
- }
-<Start>{B}*"[" {
- args+="[";
- BEGIN(ReadArgs);
- }
-<Start>{B}*"<" {
- name+="<";
- sharpCount=0;
- BEGIN(Template);
- }
-<Template>"<<" { name+="<<"; }
-<Template>">>" { name+=">>"; }
-<Template>"<" {
- name+="<";
- sharpCount++;
- }
-<Template>">" {
- name+=">";
- if (sharpCount)
- --sharpCount;
- else
- {
- BEGIN(Start);
- }
- }
-<Template>. {
- name+=*yytext;
- }
-<Operator>{B}*"("{B}*")"{B}*"<>"{B}*/"(" {
- name+="() <>";
- BEGIN(ReadArgs);
- }
-<Operator>{B}*"("{B}*")"{B}*/"(" {
- name+="()";
- BEGIN(ReadArgs);
- }
-<Operator>[^(]*{B}*("<>"{B}*)?/"(" {
- name+=yytext;
- BEGIN(ReadArgs);
- }
-<ReadArgs>"throw"{B}*"(" {
- exceptionString="throw(";
- BEGIN(ReadExceptions);
- }
-<ReadArgs>. {
- args+=*yytext;
- }
-<ReadExceptions>. {
- exceptionString+=*yytext;
- }
-<*>.
-<*>\n
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void parseFuncDecl(const QCString &decl,bool objC,QCString &cl,QCString &t,
- QCString &n,QCString &a,QCString &ftl,QCString &exc)
-{
- inputString = decl;
- //printf("Input=`%s'\n",inputString);
- if (inputString==0) return;
- inputPosition = 0;
- classTempListFound = FALSE;
- funcTempListFound = FALSE;
- insideObjC = objC;
- scope.resize(0);
- className.resize(0);
- classTempList.resize(0);
- funcTempList.resize(0);
- name.resize(0);
- type.resize(0);
- args.resize(0);
- exceptionString.resize(0);
- // first we try to find the type, scope, name and arguments
- declinfoYYrestart( declinfoYYin );
- BEGIN( Start );
- declinfoYYlex();
-
- //printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
- // type.data(),scope.data(),name.data(),args.data());
-
- int nb = name.findRev('[');
- if (nb!=-1 && args.isEmpty()) // correct for [] in name ambigity (due to Java return type allowing [])
- {
- args.prepend(name.right(name.length()-nb));
- name=name.left(nb);
- }
-
-#if 0
- {
- int l=scope.length();
- int i=0;
- int skipCount=0;
- cl.resize(0);
- ctl.resize(0);
- for (i=0;i<l;i++)
- {
- char c=scope.at(i);
- if (c=='<')
- skipCount++;
- else if (c=='>')
- skipCount--;
- else if (skipCount==0)
- cl+=c;
- }
- }
- cl=stripTemplateSpecifiersFromScope(removeRedundantWhiteSpace(scope),FALSE);
- ctl.resize(0);
-#endif
-
- cl=scope;
- n=removeRedundantWhiteSpace(name);
- int il,ir;
- if ((il=n.find('<'))!=-1 && (ir=n.findRev('>'))!=-1)
- // TODO: handle cases like where n="operator<< <T>"
- {
- ftl=removeRedundantWhiteSpace(n.right(n.length()-il));
- n=n.left(il);
- }
-
- //ctl=classTempList.copy();
- //ftl=funcTempList.copy();
- t=removeRedundantWhiteSpace(type);
- a=removeRedundantWhiteSpace(args);
- exc=removeRedundantWhiteSpace(exceptionString);
-
- if (!t.isEmpty() && t.at(t.length()-1)==')') // for function pointers
- {
- a.prepend(")");
- t=t.left(t.length()-1);
- }
- //printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
- // t.data(),cl.data(),n.data(),a.data());
-
- return;
-
-
-}
-
-//extern "C" { // some bogus code to keep the compiler happy
-// int declinfoYYwrap() { return 1 ; }
-// void declinfoYYdummy() { yy_flex_realloc(0,0); }
-//}
-
-#if 0
-void dumpDecl(const char *s)
-{
- QCString className;
- QCString classTNames;
- QCString type;
- QCString name;
- QCString args;
- QCString funcTNames;
- msg("-----------------------------------------\n");
- parseFuncDecl(s,className,classTNames,type,name,args,funcTNames);
- msg("type=`%s' class=`%s' classTempl=`%s' name=`%s' "
- "funcTemplateNames=`%s' args=`%s'\n",
- type.data(),className.data(),classTNames.data(),
- name.data(),funcTNames.data(),args.data()
- );
-}
-
-// some test code
-int main()
-{
- dumpDecl("A < T > :: Value * A < T > :: getValue < S > ( const A < T > & a )");
- dumpDecl("const A<T>::Value* A<T>::getValue<S>(const A<T>&a)");
- dumpDecl("func()");
- dumpDecl("friend void bla<>()");
- dumpDecl("name< T > :: operator () (int bla)");
- dumpDecl("name< T > :: operator << (int bla)");
- dumpDecl("name< T > :: operator << <> (int bla)");
- dumpDecl("className::func()");
- dumpDecl("void ( * Name < T > :: bla ) ( int, char * )");
-}
-#endif
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void declinfoYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-