• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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