123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- CommentParser.h - Doxygen comment parser ---------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file defines the Doxygen comment parser.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_AST_COMMENTPARSER_H
- #define LLVM_CLANG_AST_COMMENTPARSER_H
- #include "clang/AST/Comment.h"
- #include "clang/AST/CommentLexer.h"
- #include "clang/AST/CommentSema.h"
- #include "clang/Basic/Diagnostic.h"
- #include "llvm/Support/Allocator.h"
- namespace clang {
- class SourceManager;
- namespace comments {
- class CommandTraits;
- /// Doxygen comment parser.
- class Parser {
- Parser(const Parser &) = delete;
- void operator=(const Parser &) = delete;
- friend class TextTokenRetokenizer;
- Lexer &L;
- Sema &S;
- /// Allocator for anything that goes into AST nodes.
- llvm::BumpPtrAllocator &Allocator;
- /// Source manager for the comment being parsed.
- const SourceManager &SourceMgr;
- DiagnosticsEngine &Diags;
- DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
- return Diags.Report(Loc, DiagID);
- }
- const CommandTraits &Traits;
- /// Current lookahead token. We can safely assume that all tokens are from
- /// a single source file.
- Token Tok;
- /// A stack of additional lookahead tokens.
- SmallVector<Token, 8> MoreLATokens;
- void consumeToken() {
- if (MoreLATokens.empty())
- L.lex(Tok);
- else
- Tok = MoreLATokens.pop_back_val();
- }
- void putBack(const Token &OldTok) {
- MoreLATokens.push_back(Tok);
- Tok = OldTok;
- }
- void putBack(ArrayRef<Token> Toks) {
- if (Toks.empty())
- return;
- MoreLATokens.push_back(Tok);
- MoreLATokens.append(Toks.rbegin(), std::prev(Toks.rend()));
- Tok = Toks[0];
- }
- bool isTokBlockCommand() {
- return (Tok.is(tok::backslash_command) || Tok.is(tok::at_command)) &&
- Traits.getCommandInfo(Tok.getCommandID())->IsBlockCommand;
- }
- public:
- Parser(Lexer &L, Sema &S, llvm::BumpPtrAllocator &Allocator,
- const SourceManager &SourceMgr, DiagnosticsEngine &Diags,
- const CommandTraits &Traits);
- /// Parse arguments for \\param command.
- void parseParamCommandArgs(ParamCommandComment *PC,
- TextTokenRetokenizer &Retokenizer);
- /// Parse arguments for \\tparam command.
- void parseTParamCommandArgs(TParamCommandComment *TPC,
- TextTokenRetokenizer &Retokenizer);
- ArrayRef<Comment::Argument>
- parseCommandArgs(TextTokenRetokenizer &Retokenizer, unsigned NumArgs);
- BlockCommandComment *parseBlockCommand();
- InlineCommandComment *parseInlineCommand();
- HTMLStartTagComment *parseHTMLStartTag();
- HTMLEndTagComment *parseHTMLEndTag();
- BlockContentComment *parseParagraphOrBlockCommand();
- VerbatimBlockComment *parseVerbatimBlock();
- VerbatimLineComment *parseVerbatimLine();
- BlockContentComment *parseBlockContent();
- FullComment *parseFullComment();
- };
- } // end namespace comments
- } // end namespace clang
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|