1 //===--- CommentParser.h - Doxygen comment parser ---------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the Doxygen comment parser.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_AST_COMMENTPARSER_H
15 #define LLVM_CLANG_AST_COMMENTPARSER_H
17 #include "clang/AST/Comment.h"
18 #include "clang/AST/CommentLexer.h"
19 #include "clang/AST/CommentSema.h"
20 #include "clang/Basic/Diagnostic.h"
21 #include "llvm/Support/Allocator.h"
29 /// Doxygen comment parser.
31 Parser(const Parser &) = delete;
32 void operator=(const Parser &) = delete;
34 friend class TextTokenRetokenizer;
40 /// Allocator for anything that goes into AST nodes.
41 llvm::BumpPtrAllocator &Allocator;
43 /// Source manager for the comment being parsed.
44 const SourceManager &SourceMgr;
46 DiagnosticsEngine &Diags;
48 DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
49 return Diags.Report(Loc, DiagID);
52 const CommandTraits &Traits;
54 /// Current lookahead token. We can safely assume that all tokens are from
55 /// a single source file.
58 /// A stack of additional lookahead tokens.
59 SmallVector<Token, 8> MoreLATokens;
62 if (MoreLATokens.empty())
65 Tok = MoreLATokens.pop_back_val();
68 void putBack(const Token &OldTok) {
69 MoreLATokens.push_back(Tok);
73 void putBack(ArrayRef<Token> Toks) {
77 MoreLATokens.push_back(Tok);
78 MoreLATokens.append(Toks.rbegin(), std::prev(Toks.rend()));
83 bool isTokBlockCommand() {
84 return (Tok.is(tok::backslash_command) || Tok.is(tok::at_command)) &&
85 Traits.getCommandInfo(Tok.getCommandID())->IsBlockCommand;
89 Parser(Lexer &L, Sema &S, llvm::BumpPtrAllocator &Allocator,
90 const SourceManager &SourceMgr, DiagnosticsEngine &Diags,
91 const CommandTraits &Traits);
93 /// Parse arguments for \\param command.
94 void parseParamCommandArgs(ParamCommandComment *PC,
95 TextTokenRetokenizer &Retokenizer);
97 /// Parse arguments for \\tparam command.
98 void parseTParamCommandArgs(TParamCommandComment *TPC,
99 TextTokenRetokenizer &Retokenizer);
101 void parseBlockCommandArgs(BlockCommandComment *BC,
102 TextTokenRetokenizer &Retokenizer,
105 BlockCommandComment *parseBlockCommand();
106 InlineCommandComment *parseInlineCommand();
108 HTMLStartTagComment *parseHTMLStartTag();
109 HTMLEndTagComment *parseHTMLEndTag();
111 BlockContentComment *parseParagraphOrBlockCommand();
113 VerbatimBlockComment *parseVerbatimBlock();
114 VerbatimLineComment *parseVerbatimLine();
115 BlockContentComment *parseBlockContent();
116 FullComment *parseFullComment();
119 } // end namespace comments
120 } // end namespace clang