17#ifndef FRONTENDS_PARSERS_PARSERDRIVER_H_
18#define FRONTENDS_PARSERS_PARSERDRIVER_H_
25#include "frontends/p4/symbol_table.h"
26#include "frontends/parsers/p4/abstractP4Lexer.hpp"
27#include "frontends/parsers/p4/p4AnnotationLexer.hpp"
29#include "lib/cstring.h"
30#include "lib/source_file.h"
39class AbstractParserDriver {
41 virtual ~AbstractParserDriver() = 0;
44 AbstractParserDriver();
88 int lineDirectiveLine = 0;
98class P4ParserDriver final :
public AbstractParserDriver {
113 static const IR::P4Program *
parse(std::istream &in, std::string_view sourceFile,
114 unsigned sourceLine = 1);
115 static const IR::P4Program *
parse(FILE *in, std::string_view sourceFile,
116 unsigned sourceLine = 1);
141 static const IR::Expression *parseExpression(
const Util::SourceInfo &srcInfo,
147 static const IR::Expression *parseConstantOrStringLiteral(
150 static const IR::StringLiteral *parseStringLiteral(
const Util::SourceInfo &srcInfo,
178 friend class P4::P4Lexer;
179 friend class P4::P4Parser;
201 bool template_args =
false;
207 bool parse(AbstractP4Lexer &lexer, std::string_view sourceFile,
unsigned sourceLine = 1);
210 template <
typename T>
217 IR::Type_Error *allErrors =
nullptr;
243 static const IR::V1Program *
parse(std::istream &in, std::string_view sourceFile,
244 unsigned sourceLine = 1);
245 static const IR::V1Program *
parse(FILE *in, std::string_view sourceFile,
246 unsigned sourceLine = 1);
249 friend class V1::V1Lexer;
250 friend class V1::V1Parser;
Definition parserDriver.h:39
void onParseError(const Util::SourceInfo &location, const std::string &message)
Definition parserDriver.cpp:105
Util::SourceInfo yylloc
The location of the most recent token.
Definition parserDriver.h:81
void onReadToken(const char *text)
Notify that the lexer read a token. @text is the matched source text.
Definition parserDriver.cpp:76
void onReadComment(const char *text, bool lineComment)
Definition parserDriver.cpp:94
void onReadFileName(const char *text)
Notify that the lexer read a filename from a line directive.
Definition parserDriver.cpp:98
void onReadLineNumber(const char *text)
Notify that the lexer read a line number from a line directive.
Definition parserDriver.cpp:83
int saveState
Scratch storage for the lexer to remember its previous state.
Definition parserDriver.h:84
Util::InputSources * sources
The input sources that comprise the P4 program we're parsing.
Definition parserDriver.h:78
void onReadIdentifier(cstring id)
Notify that the lexer read an identifier, @id.
Definition parserDriver.cpp:103
Definition indexed_vector.h:40
Util::ProgramStructure * structure
Semantic information about the program being parsed.
Definition parserDriver.h:189
void onReadErrorDeclaration(IR::Type_Error *error)
Notify that the parser parsed a P4 error declaration.
Definition parserDriver.cpp:276
static const IR::Vector< IR::Expression > * parseExpressionList(const Util::SourceInfo &srcInfo, const IR::Vector< IR::AnnotationToken > &body)
Definition parserDriver.cpp:169
IR::Vector< IR::Node > * nodes
Definition parserDriver.h:193
std::string stringLiteral
Definition parserDriver.h:197
static const IR::P4Program * parse(std::istream &in, std::string_view sourceFile, unsigned sourceLine=1)
Definition parserDriver.cpp:139
Definition symbol_table.h:39
Definition source_file.h:124
void addPragma(IR::Annotation *pragma)
Add @pragma to the list of active pragmas.
Definition parserDriver.cpp:333
IR::Vector< IR::Annotation > takePragmasAsVector()
Definition parserDriver.cpp:337
static const IR::V1Program * parse(std::istream &in, std::string_view sourceFile, unsigned sourceLine=1)
Definition parserDriver.cpp:291
IR::Vector< IR::Expression > makeExpressionList(const IR::NameList *list)
Definition parserDriver.cpp:325
const IR::Annotations * takePragmasAsAnnotations()
Definition parserDriver.cpp:343
IR::V1Program * global
The root of the IR tree we're constructing.
Definition parserDriver.h:284
void clearPragmas()
Clear the list of active pragmas.
Definition parserDriver.cpp:331
IR::Constant * constantFold(IR::Expression *expr)
Definition parserDriver.cpp:319
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition error.h:51