xref: /foundation/ability/idl_tool/parser/parser.h (revision ca0551cf)
1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef OHOS_IDL_PARSER_H
17#define OHOS_IDL_PARSER_H
18
19#include "ast/ast_interface_type.h"
20#include "ast/ast_method.h"
21#include "ast/ast_module.h"
22#include "ast/ast_type.h"
23#include "parser/lexer.h"
24#include "parser/token.h"
25#include "util/autoptr.h"
26#include "util/light_refcount_base.h"
27#include "util/options.h"
28#include "util/string.h"
29
30namespace OHOS {
31namespace Idl {
32class Parser {
33public:
34    explicit Parser(const Options& options);
35
36    ~Parser() = default;
37
38    bool Parse(const String& sourceFile);
39
40    AutoPtr<ASTModule> GetModule() const
41    {
42        return module_;
43    }
44
45private:
46    class ErrorInfo : public LightRefCountBase {
47    public:
48        String file_;
49        Token token_;
50        int lineNo_;
51        int columnNo_;
52        String message_;
53        AutoPtr<ErrorInfo> next_;
54    };
55
56    bool ParseFile();
57
58    bool ParseLicense();
59
60    bool ParseInterface();
61
62    bool ParseInterfaceMiddle(Token& token, String& interfaceFullName);
63
64    bool ParseInterfaceEnd(Token& token, String& interfaceFullName, bool hasProperties, bool oneway, bool ret);
65
66    bool ParseMethod(ASTInterfaceType* interface);
67
68    bool ParseMethodProperties(bool& oneway, bool& cacheable, int& cacheTime);
69
70    bool ParseMethodName(Token& token, ASTType* type, ASTInterfaceType* interface);
71
72    bool ParseMethodBrackets(Token& token, ASTMethod* method, bool& ret);
73
74    bool ParseParameter(ASTMethod* method);
75
76    bool ParseParameterPeek(Token& token);
77
78    bool ParseParameterInOut(Token& token, ASTParameter* parameter);
79
80    void SetMethodAttr(ASTMethod* method, ASTType *returnType, bool oneway, bool cacheable, int cacheTime);
81
82    AutoPtr<ASTNamespace> NameSpaceEmpty();
83
84    AutoPtr<ASTType> ParseType();
85
86    AutoPtr<ASTType> ParseList();
87
88    AutoPtr<ASTType> ParseMap();
89
90    bool ParseSequenceable();
91
92    bool CheckIntegrity();
93
94    bool IsValidTypeName(const String& typeName);
95
96    static bool IsPrimitiveType(Token token)
97    {
98        return token >= Token::BOOLEAN && token <= Token::STRING;
99    }
100
101    void LogError(Token token, const String& message);
102
103    void ShowError();
104
105    static const char* tag;
106
107    const Options& options_;
108    AutoPtr<ASTModule> module_;
109    AutoPtr<ASTInterfaceType> parsingInterface_;
110    Lexer lexer_;
111    AutoPtr<ErrorInfo> errors_;
112};
113} // namespace Idl
114} // namespace OHOS
115#endif // OHOS_IDL_PARSER_H
116