1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FXFA_FM2JS_XFA_FMPARSE_H_ 8 #define XFA_FXFA_FM2JS_XFA_FMPARSE_H_ 9 10 #include <memory> 11 #include <vector> 12 13 #include "xfa/fxfa/fm2js/xfa_expression.h" 14 #include "xfa/fxfa/fm2js/xfa_lexer.h" 15 16 class CXFA_FMParse { 17 public: 18 CXFA_FMParse(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo); 19 ~CXFA_FMParse(); 20 21 void NextToken(); 22 void Check(XFA_FM_TOKEN op); 23 void Error(uint32_t lineNum, const FX_WCHAR* msg, ...); 24 std::vector<std::unique_ptr<CXFA_FMExpression>> ParseTopExpression(); 25 std::unique_ptr<CXFA_FMExpression> ParseFunction(); 26 std::unique_ptr<CXFA_FMExpression> ParseExpression(); 27 std::unique_ptr<CXFA_FMExpression> ParseVarExpression(); 28 std::unique_ptr<CXFA_FMExpression> ParseExpExpression(); 29 std::unique_ptr<CXFA_FMExpression> ParseBlockExpression(); 30 std::unique_ptr<CXFA_FMExpression> ParseIfExpression(); 31 std::unique_ptr<CXFA_FMExpression> ParseWhileExpression(); 32 std::unique_ptr<CXFA_FMExpression> ParseForExpression(); 33 std::unique_ptr<CXFA_FMExpression> ParseForeachExpression(); 34 std::unique_ptr<CXFA_FMExpression> ParseDoExpression(); 35 std::unique_ptr<CXFA_FMSimpleExpression> ParseParenExpression(); 36 std::unique_ptr<CXFA_FMSimpleExpression> ParseSimpleExpression(); 37 std::unique_ptr<CXFA_FMSimpleExpression> ParseSubassignmentInForExpression(); 38 std::unique_ptr<CXFA_FMSimpleExpression> ParseLogicalOrExpression(); 39 std::unique_ptr<CXFA_FMSimpleExpression> ParseLogicalAndExpression(); 40 std::unique_ptr<CXFA_FMSimpleExpression> ParseEqualityExpression(); 41 std::unique_ptr<CXFA_FMSimpleExpression> ParseRelationalExpression(); 42 std::unique_ptr<CXFA_FMSimpleExpression> ParseAddtiveExpression(); 43 std::unique_ptr<CXFA_FMSimpleExpression> ParseMultiplicativeExpression(); 44 std::unique_ptr<CXFA_FMSimpleExpression> ParseUnaryExpression(); 45 std::unique_ptr<CXFA_FMSimpleExpression> ParsePrimaryExpression(); 46 std::unique_ptr<CXFA_FMSimpleExpression> ParsePostExpression( 47 std::unique_ptr<CXFA_FMSimpleExpression> e); 48 std::unique_ptr<CXFA_FMSimpleExpression> ParseIndexExpression(); 49 50 private: 51 std::unique_ptr<CXFA_FMLexer> m_lexer; 52 CXFA_FMToken* m_pToken; 53 CXFA_FMErrorInfo* const m_pErrorInfo; 54 }; 55 56 #endif // XFA_FXFA_FM2JS_XFA_FMPARSE_H_ 57