1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// 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_FMLEXER_H_
#define XFA_FXFA_FM2JS_CXFA_FMLEXER_H_
#include "core/fxcrt/fx_string.h"
enum XFA_FM_TOKEN {
TOKand,
TOKlparen,
TOKrparen,
TOKmul,
TOKplus,
TOKcomma,
TOKminus,
TOKdot,
TOKdiv,
TOKlt,
TOKassign,
TOKgt,
TOKlbracket,
TOKrbracket,
TOKor,
TOKdotscream,
TOKdotstar,
TOKdotdot,
TOKle,
TOKne,
TOKeq,
TOKge,
TOKdo,
TOKkseq,
TOKksge,
TOKksgt,
TOKif,
TOKin,
TOKksle,
TOKkslt,
TOKksne,
TOKksor,
TOKnull,
TOKbreak,
TOKksand,
TOKend,
TOKeof,
TOKfor,
TOKnan,
TOKksnot,
TOKvar,
TOKthen,
TOKelse,
TOKexit,
TOKdownto,
TOKreturn,
TOKinfinity,
TOKendwhile,
TOKforeach,
TOKendfunc,
TOKelseif,
TOKwhile,
TOKendfor,
TOKthrow,
TOKstep,
TOKupto,
TOKcontinue,
TOKfunc,
TOKendif,
TOKstar,
TOKidentifier,
TOKunderscore,
TOKdollar,
TOKexclamation,
TOKcall,
TOKstring,
TOKnumber,
TOKreserver
};
struct XFA_FMKeyword {
XFA_FM_TOKEN m_type;
const wchar_t* m_keyword; // Raw, POD struct.
};
class CXFA_FMToken {
public:
CXFA_FMToken();
explicit CXFA_FMToken(XFA_FM_TOKEN token);
CXFA_FMToken(const CXFA_FMToken&);
~CXFA_FMToken();
#ifndef NDEBUG
WideString ToDebugString() const;
#endif // NDEBUG
WideStringView m_string;
XFA_FM_TOKEN m_type;
};
class CXFA_FMLexer {
public:
explicit CXFA_FMLexer(const WideStringView& wsFormcalc);
~CXFA_FMLexer();
CXFA_FMToken NextToken();
bool IsComplete() const { return m_cursor >= m_end; }
private:
CXFA_FMToken AdvanceForNumber();
CXFA_FMToken AdvanceForString();
CXFA_FMToken AdvanceForIdentifier();
void AdvanceForComment();
void RaiseError() { m_lexer_error = true; }
const wchar_t* m_cursor;
const wchar_t* const m_end;
bool m_lexer_error;
};
#endif // XFA_FXFA_FM2JS_CXFA_FMLEXER_H_
|