blob: 3099f6cfe02f9ea885522e977c5e3e8a65cbceaa (
plain)
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
|
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
#pragma once
#include "Chunk.h"
namespace antlr4 {
namespace tree {
namespace pattern {
/// <summary>
/// Represents a placeholder tag in a tree pattern. A tag can have any of the
/// following forms.
///
/// <ul>
/// <li>{@code expr}: An unlabeled placeholder for a parser rule {@code
/// expr}.</li> <li>{@code ID}: An unlabeled placeholder for a token of type
/// {@code ID}.</li> <li>{@code e:expr}: A labeled placeholder for a parser rule
/// {@code expr}.</li> <li>{@code id:ID}: A labeled placeholder for a token of
/// type {@code ID}.</li>
/// </ul>
///
/// This class does not perform any validation on the tag or label names aside
/// from ensuring that the tag is a non-null, non-empty string.
/// </summary>
class ANTLR4CPP_PUBLIC TagChunk : public Chunk {
public:
/// <summary>
/// Construct a new instance of <seealso cref="TagChunk"/> using the specified
/// tag and no label.
/// </summary>
/// <param name="tag"> The tag, which should be the name of a parser rule or
/// token type.
/// </param>
/// <exception cref="IllegalArgumentException"> if {@code tag} is {@code null}
/// or empty. </exception>
TagChunk(const std::string& tag);
virtual ~TagChunk();
/// <summary>
/// Construct a new instance of <seealso cref="TagChunk"/> using the specified
/// label and tag.
/// </summary>
/// <param name="label"> The label for the tag. If this is {@code null}, the
/// <seealso cref="TagChunk"/> represents an unlabeled tag. </param>
/// <param name="tag"> The tag, which should be the name of a parser rule or
/// token type.
/// </param>
/// <exception cref="IllegalArgumentException"> if {@code tag} is {@code null}
/// or empty. </exception>
TagChunk(const std::string& label, const std::string& tag);
/// <summary>
/// Get the tag for this chunk.
/// </summary>
/// <returns> The tag for the chunk. </returns>
std::string getTag();
/// <summary>
/// Get the label, if any, assigned to this chunk.
/// </summary>
/// <returns> The label assigned to this chunk, or {@code null} if no label is
/// assigned to the chunk. </returns>
std::string getLabel();
/// <summary>
/// This method returns a text representation of the tag chunk. Labeled tags
/// are returned in the form {@code label:tag}, and unlabeled tags are
/// returned as just the tag name.
/// </summary>
virtual std::string toString();
private:
/// This is the backing field for <seealso cref="#getTag"/>.
const std::string _tag;
/// <summary>
/// This is the backing field for <seealso cref="#getLabe"/>.
/// </summary>
const std::string _label;
};
} // namespace pattern
} // namespace tree
} // namespace antlr4
|