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_COMMENT_PARSER_H
15 #define LLVM_CLANG_AST_COMMENT_PARSER_H
17 #include "clang/Basic/Diagnostic.h"
18 #include "clang/AST/CommentLexer.h"
19 #include "clang/AST/Comment.h"
20 #include "clang/AST/CommentSema.h"
21 #include "llvm/Support/Allocator.h"
29 /// Doxygen comment parser.
31 Parser(const Parser &) LLVM_DELETED_FUNCTION;
32 void operator=(const Parser &) LLVM_DELETED_FUNCTION;
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.back();
66 MoreLATokens.pop_back();
70 void putBack(const Token &OldTok) {
71 MoreLATokens.push_back(Tok);
75 void putBack(ArrayRef<Token> Toks) {
79 MoreLATokens.push_back(Tok);
80 for (const Token *I = &Toks.back(),
83 MoreLATokens.push_back(*I);
90 Parser(Lexer &L, Sema &S, llvm::BumpPtrAllocator &Allocator,
91 const SourceManager &SourceMgr, DiagnosticsEngine &Diags,
92 const CommandTraits &Traits);
94 /// Parse arguments for \\param command.
95 void parseParamCommandArgs(ParamCommandComment *PC,
96 TextTokenRetokenizer &Retokenizer);
98 /// Parse arguments for \\tparam command.
99 void parseTParamCommandArgs(TParamCommandComment *TPC,
100 TextTokenRetokenizer &Retokenizer);
102 void parseBlockCommandArgs(BlockCommandComment *BC,
103 TextTokenRetokenizer &Retokenizer,
106 BlockCommandComment *parseBlockCommand();
107 InlineCommandComment *parseInlineCommand();
109 HTMLStartTagComment *parseHTMLStartTag();
110 HTMLEndTagComment *parseHTMLEndTag();
112 BlockContentComment *parseParagraphOrBlockCommand();
114 VerbatimBlockComment *parseVerbatimBlock();
115 VerbatimLineComment *parseVerbatimLine();
116 BlockContentComment *parseBlockContent();
117 FullComment *parseFullComment();
120 } // end namespace comments
121 } // end namespace clang