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 for (const Token *I = &Toks.back(),
81 MoreLATokens.push_back(*I);
87 bool isTokBlockCommand() {
88 return (Tok.is(tok::backslash_command) || Tok.is(tok::at_command)) &&
89 Traits.getCommandInfo(Tok.getCommandID())->IsBlockCommand;
93 Parser(Lexer &L, Sema &S, llvm::BumpPtrAllocator &Allocator,
94 const SourceManager &SourceMgr, DiagnosticsEngine &Diags,
95 const CommandTraits &Traits);
97 /// Parse arguments for \\param command.
98 void parseParamCommandArgs(ParamCommandComment *PC,
99 TextTokenRetokenizer &Retokenizer);
101 /// Parse arguments for \\tparam command.
102 void parseTParamCommandArgs(TParamCommandComment *TPC,
103 TextTokenRetokenizer &Retokenizer);
105 void parseBlockCommandArgs(BlockCommandComment *BC,
106 TextTokenRetokenizer &Retokenizer,
109 BlockCommandComment *parseBlockCommand();
110 InlineCommandComment *parseInlineCommand();
112 HTMLStartTagComment *parseHTMLStartTag();
113 HTMLEndTagComment *parseHTMLEndTag();
115 BlockContentComment *parseParagraphOrBlockCommand();
117 VerbatimBlockComment *parseVerbatimBlock();
118 VerbatimLineComment *parseVerbatimLine();
119 BlockContentComment *parseBlockContent();
120 FullComment *parseFullComment();
123 } // end namespace comments
124 } // end namespace clang