// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef XFA_FXFA_FM2JS_CXFA_FMPARSE_H_ #define XFA_FXFA_FM2JS_CXFA_FMPARSE_H_ #include #include #include "xfa/fxfa/fm2js/cxfa_fmexpression.h" #include "xfa/fxfa/fm2js/cxfa_fmlexer.h" class CXFA_FMParse { public: explicit CXFA_FMParse(const CFX_WideStringC& wsFormcalc); ~CXFA_FMParse(); std::unique_ptr Parse(); bool HasError() const; private: void NextToken(); void Check(XFA_FM_TOKEN op); std::vector> ParseTopExpression(); std::unique_ptr ParseFunction(); std::unique_ptr ParseExpression(); std::unique_ptr ParseVarExpression(); std::unique_ptr ParseExpExpression(); std::unique_ptr ParseBlockExpression(); std::unique_ptr ParseIfExpression(); std::unique_ptr ParseWhileExpression(); std::unique_ptr ParseForExpression(); std::unique_ptr ParseForeachExpression(); std::unique_ptr ParseDoExpression(); std::unique_ptr ParseParenExpression(); std::unique_ptr ParseSimpleExpression(); std::unique_ptr ParseSubassignmentInForExpression(); std::unique_ptr ParseLogicalOrExpression(); std::unique_ptr ParseLogicalAndExpression(); std::unique_ptr ParseEqualityExpression(); std::unique_ptr ParseRelationalExpression(); std::unique_ptr ParseAddtiveExpression(); std::unique_ptr ParseMultiplicativeExpression(); std::unique_ptr ParseUnaryExpression(); std::unique_ptr ParsePrimaryExpression(); std::unique_ptr ParsePostExpression( std::unique_ptr e); std::unique_ptr ParseIndexExpression(); std::unique_ptr m_lexer; CXFA_FMToken* m_pToken; bool m_ParserError; }; #endif // XFA_FXFA_FM2JS_CXFA_FMPARSE_H_