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

📄 javaparser.h

📁 用bcg库编写的java IDE 源码
💻 H
字号:
// JavaParser.h: interface for the CJavaParser class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_JAVAPARSER_H__E0D1DA64_2784_48E3_A29F_31767A6AE88B__INCLUDED_)
#define AFX_JAVAPARSER_H__E0D1DA64_2784_48E3_A29F_31767A6AE88B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include "ptrStack.h"
#include "browser.h"

class CJavaDeclManager;


class CJavaParser  : public CBaseParser
{
    int     m_nCharIndex;
    int     m_nLineIndex;
	int     m_nLineLength;
	int     m_nStartIndex;
	int     m_nStartLine;

	LPCTSTR m_lszpLine;
    CString m_strCurToken;
    CJavaDeclManager* m_pDeclManager;

	bool    m_bSuccess;
	bool    m_bDynamiclyParsing;
	//bool    m_bPeeking;
	bool    m_bTotalParse;
	bool    m_bCodeCompletionAction;

	int     m_nLiteralType;
    int     m_nStopPos;
    CString m_strImportType;

	genStack<CString> m_stTokens;
    CStringList       m_lstrArgs;
    bool    m_bCCSuccess;
	struct __state__{
      int      line;
	  int      index;
	  int      length;
      LPCTSTR  szpLine;
	  CString token;
	   __state__(int li,int in,int len,LPCTSTR szpl, CString s)
	   {
         line = li; index = in; token = s;length = len;szpLine = szpl;
	   }
       __state__()
	   {

	   }
	};

	genStack<__state__> m_stStates;


    UINT          m_nDeclType;
	//semantic related data
	CStringList m_lstrModifiers;

	CString     m_strAccessModifier;
	CString     m_strReturnType;
	CString     m_strMethodName;
	CString     m_strFullMethDescrpt;

	CStringList m_lstrVariableNames;
	CString     m_strClassOrInterfaceName;
	CString     m_strSuper;

	CStringList m_lstrSuperInterfaceList;
	CStringList m_lstrImplementedInterfaces;

	CString     m_strFieldType;
	CString     m_strParamName;
	CString     m_strParamType;

	CStringList m_lstrParams;
	CStringList m_lstrParamTypes;

	CString     m_strPartialMethodSig;
	CString     m_strImport;
	CString     m_strReturnedVal;

	CStringList m_lstrMethodInfo;

	CString     m_strPackage;

    void smtAddModifier(CString strMod);
	void smtSetAccessModifier(CString strMod);
	void smtSetReturnType(CString strRetType);
	void smtSetMethodName(CString strMeth);
	void smtSetFullMethDescpt(CString strMeth);
	void smtSetVariableName(CString strVar);
	void smtSetClassOrInterfaceName(CString strClassOrIntfName);
	void smtSetSuper(CString strSuper);
	void smtAddSuperInterface(CString strIntf);
	void smtAddImplIntf(CString strIntf);
	void smtSetFieldType(CString strFieldType);
	void smtSetParamName(CString strParam);
	void smtSetParamType(CString strParamType);

	struct _token
	{
      int type;
	  CString strToken;
	  _token(int t,CString str)
	  {
        type = t; strToken = str;
	  }
	  _token(){type =0;}
	};

	struct _expr
	{
       genStack<_token> m_stkOperandStack;
	   genStack<_token> m_stkOperatorStack;
       void Pop(_token& token)
	   {
         m_stkOperandStack.Pop(token);
	   }
	};
	_expr m_exprAutomaton;
	CString m_strCCType;
	CBlockDecl* m_pLastBlock;
	int m_nBlockCount;
public:
	static LPCTSTR      m_lszpBasicTypes[];
	static LPCTSTR      m_lszpPostFixOps[];
	static LPCTSTR      m_lszpInfixOps[];
	static LPCTSTR      m_lszpPrefixOps[];
	static LPCTSTR      m_lszpAssignmentOps[];
	static LPCTSTR      m_lszpModifiers[];
	static LPCTSTR      m_lszpJavaKeyword[];

	CJavaParser(CJavaDeclManager*,bool = true);
	virtual ~CJavaParser();


	void saveState();
	void resetState();
	void popStack();



	bool expr_0();
	bool expr_1();
	bool expr_2();
	bool expr_3();

	bool expr_1rest();
	bool expr_2rest();

	bool primary();
	bool selector();
	bool arguments();
	bool superSuffix();
	bool literal();
    bool creator();
	bool qualifiedIdentifier();
	bool arrayCreatorRest();
	bool classCreatorRest();
	bool arrayInitializer();
	bool assignmentOperator();
	bool prefixOp();
	bool postfixOp();
	bool infixop();
	bool identifier();
	bool innercreator();
	bool identifierSuffix();
	bool basicType();
	bool variableInitializer();
	bool memberdecl();
	bool methodOrFieldRest();
	bool methodOrFieldDecl();
    bool type();
	bool variableDeclarators();
    bool variableDeclarator();
    bool variableDeclaratorRest();
	bool variableDeclaratorsRest();
	bool variableDeclaratorId();
    bool methodDeclaratorRest();
    bool bracketsOpt();
    bool formalParameters();
	bool formalParameter();
	bool qualifiedIdentifierList();
	bool localVariableDeclarationStatement();
    bool argumentsOpt();
    bool parExpression();
	bool blockStatement();
	bool classOrInterfaceDeclaration();
	bool modifier();
	bool modifiersOpt();
	bool classDeclaration();
	bool typeList();
    bool packageDeclaration();
	bool importDeclaration();
    
	bool integerLiteral();
	bool decimalLiteral();

	bool hexLiteral();
	bool hexDigit(char nChar);

	bool octalLiteral();

	bool floatingPointLiteral();
	bool stringLiteral();
	bool characterLiteral();
    bool booleanLiteral();
	bool nullLiteral();

	bool constructorDeclaratorRest();
	bool classBodyDeclaration();
	bool interfaceDeclaration();
    bool interfaceBodyDeclaration();
	bool interfaceMemberDecl();
	bool interfaceMethodOrFieldDecl();
	bool interfaceMethodOrFieldRest();
	bool voidInterfaceMethodDeclaratorRest();
	bool interfaceMethodDeclaratorRest();
    bool voidMethodDeclarationRest();
	bool block();
    bool constantDeclaratorsRest();
	bool constantDeclarator();
	bool constantDeclaratorRest();
  
    bool typeDeclaration();

	bool getNextToken();
	bool getNextLine();



	bool declareMember();
	bool declareLocal();
	bool declareType();
	bool declarePackage();
	bool declareImport();
	bool parse();
	bool BalanceBraces(CString);
	void parseOnFileLoaded();
	void dynamicParse(int nCharIndex,int nLineIndex,CBlockDecl* pBlock= NULL);
	virtual void UpdateBlock(CBlockDecl* pDecl);

	bool isoperator();
	bool skipExtComment();
	bool skipExtCommentBU();
	bool skipSingleLineComment();
	bool getStringOrCharLiteral(char nChar);
	bool getStringOrCharLiteralBU(char nChar);
	bool peekStringOrCharLiteralBU(char nChar);
	bool isJavaKeyword();
	bool isAssignmentOp();
	bool isBasicType();
	bool isIdentifier();
	bool isLiteral();
	bool isCharacterLiteral();
	bool isStringLiteral();
	bool isIntegerLiteral();
	bool isFloatingPointLiteral();
	bool isInfixOp();
	bool isPostfixOp();
	bool isType();
	bool isPrefixOp();
	bool isModifier();
    bool isAccessModifier();
	bool getNextTokenImpl();
	void findStopSymbol();

	bool getOperator();


	bool FIRSTexpr();
	bool FIRSTexpr_3();
	bool FIRSTselector();
	bool FIRSTexpression2rest();
	bool FIRSTidentifierSuffix();
	void ResetSemanticUtil();

	bool declField();
	bool declMethod();
	bool declInterface();
	bool declClass();
	bool declBlock();
	bool declEndBrace();
	bool declPackage();
	bool declImport();

	bool getLineAbove();
	bool OnDotImpl(int nCharIndex,int nLineIndex,CString&);
	bool OnCallMethod(int nCharIndex, int nLineIndex,CString& strOutType,
	                                                            CString& strMethod);

	bool extractInvockedMethod();
	bool limitedGetNextToken();
    bool getNextNonSpaceCharBU(char& nChar);
	bool extIdentifierBU();
	bool BackTrackOneSentence();

	int  precedence(CString strOp);

	void setImportType(CString strType){m_strImportType = strType;}
	bool validRelation(UINT nWouldBeChild,UINT nWouldBeParent);

	void createQualifiedName(__CBaseDecl*,CString&);

	void exprEvaluator(CString strToken,int nType);
	void getReturnType();
	void execute();

	bool incommentBlock();


	bool totalParse(){return m_bTotalParse;};
	void ReArrangeBraces(__CBaseDecl*,CBlockDecl*);
};

#endif // !defined(AFX_JAVAPARSER_H__E0D1DA64_2784_48E3_A29F_31767A6AE88B__INCLUDED_)

⌨️ 快捷键说明

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