MCAsmParser.h revision 94b9550a32d189704a8eae55505edf62662c0534
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===-- llvm/MC/MCAsmParser.h - Abstract Asm Parser Interface ---*- C++ -*-===// 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The LLVM Compiler Infrastructure 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details. 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef LLVM_MC_MCASMPARSER_H 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define LLVM_MC_MCASMPARSER_H 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "llvm/Support/DataTypes.h" 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace llvm { 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class AsmToken; 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCAsmInfo; 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCAsmLexer; 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCAsmParserExtension; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCContext; 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCExpr; 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCStreamer; 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCTargetAsmParser; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SMLoc; 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SourceMgr; 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StringRef; 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Target; 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Twine; 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// MCAsmParser - Generic assembler parser interface, for use by target specific 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/// assembly parsers. 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MCAsmParser { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef bool (*DirectiveHandler)(MCAsmParserExtension*, StringRef, SMLoc); 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MCAsmParser(const MCAsmParser &); // DO NOT IMPLEMENT 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void operator=(const MCAsmParser &); // DO NOT IMPLEMENT 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MCTargetAsmParser *TargetParser; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned ShowParsedOperands : 1; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: // Can only create subclasses. 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MCAsmParser(); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~MCAsmParser(); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void AddDirectiveHandler(MCAsmParserExtension *Object, 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StringRef Directive, 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DirectiveHandler Handler) = 0; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual SourceMgr &getSourceManager() = 0; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual MCAsmLexer &getLexer() = 0; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual MCContext &getContext() = 0; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// getStreamer - Return the output streamer for the assembler. 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual MCStreamer &getStreamer() = 0; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MCTargetAsmParser &getTargetParser() const { return *TargetParser; } 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setTargetParser(MCTargetAsmParser &P); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool getShowParsedOperands() const { return ShowParsedOperands; } 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setShowParsedOperands(bool Value) { ShowParsedOperands = Value; } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Run - Run the parser on the input source buffer. 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Warning - Emit a warning at the location \arg L, with the message \arg 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Msg. 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// \return The return value is true, if warnings are fatal. 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool Warning(SMLoc L, const Twine &Msg) = 0; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Error - Emit an error at the location \arg L, with the message \arg 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Msg. 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// \return The return value is always true, as an idiomatic convenience to 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// clients. 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool Error(SMLoc L, const Twine &Msg) = 0; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// Lex - Get the next AsmToken in the stream, possibly handling file 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// inclusion first. 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const AsmToken &Lex() = 0; 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /// getTok - Get the current AsmToken from the stream. 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AsmToken &getTok(); 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /// \brief Report an error at the current lexer location. 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool TokError(const Twine &Msg); 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 95 /// ParseIdentifier - Parse an identifier or string (as a quoted identifier) 96 /// and set \arg Res to the identifier contents. 97 virtual bool ParseIdentifier(StringRef &Res) = 0; 98 99 /// \brief Parse up to the end of statement and return the contents from the 100 /// current token until the end of the statement; the current token on exit 101 /// will be either the EndOfStatement or EOF. 102 virtual StringRef ParseStringToEndOfStatement() = 0; 103 104 /// EatToEndOfStatement - Skip to the end of the current statement, for error 105 /// recovery. 106 virtual void EatToEndOfStatement() = 0; 107 108 /// ParseExpression - Parse an arbitrary expression. 109 /// 110 /// @param Res - The value of the expression. The result is undefined 111 /// on error. 112 /// @result - False on success. 113 virtual bool ParseExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0; 114 bool ParseExpression(const MCExpr *&Res); 115 116 /// ParseParenExpression - Parse an arbitrary expression, assuming that an 117 /// initial '(' has already been consumed. 118 /// 119 /// @param Res - The value of the expression. The result is undefined 120 /// on error. 121 /// @result - False on success. 122 virtual bool ParseParenExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0; 123 124 /// ParseAbsoluteExpression - Parse an expression which must evaluate to an 125 /// absolute value. 126 /// 127 /// @param Res - The value of the absolute expression. The result is undefined 128 /// on error. 129 /// @result - False on success. 130 virtual bool ParseAbsoluteExpression(int64_t &Res) = 0; 131}; 132 133/// \brief Create an MCAsmParser instance. 134MCAsmParser *createMCAsmParser(const Target &, SourceMgr &, MCContext &, 135 MCStreamer &, const MCAsmInfo &); 136 137} // End llvm namespace 138 139#endif 140