12 #include <hilti/compiler/context.h> 14 #include <spicy/ast/aliases.h> 15 #include <spicy/ast/types/unit.h> 16 #include <spicy/compiler/detail/codegen/production.h> 31 struct ProductionVisitor;
38 enum class LiteralMode {
57 {LiteralMode::Try,
"try"},
58 {LiteralMode::Search,
"search"}};
61 constexpr
auto to_string(LiteralMode cc) {
return hilti::util::enum_::to_string(cc, detail::literal_modes); }
63 namespace look_ahead {
73 extern const hilti::Expression None;
79 extern const hilti::Expression Eod;
106 void printDebug(
const std::shared_ptr<hilti::builder::Builder>& b)
const;
109 std::reference_wrapper<const type::Unit>
unit;
127 std::optional<Expression> ncur;
139 Expression lahead = look_ahead::None;
148 LiteralMode literal_mode = LiteralMode::Default;
188 Expression parseMethodExternalOverload1(
const type::Unit& t);
196 Expression parseMethodExternalOverload2(
const type::Unit& t);
205 Expression parseMethodExternalOverload3(
const type::Unit& t);
212 Expression contextNewFunction(
const type::Unit& t);
225 _builders.emplace_back(b);
230 std::shared_ptr<hilti::builder::Builder> pushBuilder();
234 auto x = _builders.back();
235 _builders.pop_back();
257 auto pushBuilder(std::shared_ptr<hilti::builder::Builder> b,
const std::function<
void()>& func) {
265 Expression parseType(
const Type& t,
const production::Meta& meta,
const std::optional<Expression>& dst);
268 Expression parseTypeTry(
const Type& t,
const production::Meta& meta,
const std::optional<Expression>& dst);
271 hilti::type::Function parseMethodFunctionType(std::optional<type::function::Parameter> addl_param = {},
289 Expression parseLiteral(
const Production& p,
const std::optional<Expression>& dst);
302 void waitForInput(
const Expression& min,
const std::string& error_msg,
const Meta&
location);
315 Expression waitForInputOrEod(
const Expression& min);
324 void waitForInput(
const std::string& error_msg,
const Meta& location);
334 Expression waitForInputOrEod();
349 void advanceToNextData();
358 void advanceInput(
const Expression& i);
365 void setInput(
const Expression& i);
372 void saveParsePosition();
387 void consumeLookAhead(std::optional<Expression> dst = {});
390 void parseError(
const std::string& error_msg,
const Meta& location);
393 void parseError(
const Expression& error_msg,
const Meta& location);
396 void parseError(
const std::string& fmt, std::vector<Expression> args,
const Meta& location);
399 void newValueForField(
const production::Meta& meta,
const Expression& value,
const Expression& dd);
417 Expression newContainerItem(
const type::unit::item::Field& field,
const Expression&
self,
const Expression& item,
428 std::optional<Expression> dst = {});
437 void trimInput(
bool force =
false);
445 void initializeUnit(
const Location& l);
454 void finalizeUnit(
bool success,
const Location& l);
457 void initBacktracking();
460 void finishBacktracking();
468 Expression initLoopBody();
478 void finishLoopBody(
const Expression& cookie,
const Location& l);
489 void guardFeatureCode(
const type::Unit& unit,
const std::vector<std::string_view>& features,
490 const std::function<
void()>& f);
492 CodeGen* cg()
const {
return _cg; }
493 std::shared_ptr<hilti::Context> context()
const;
500 Expression _parseType(
const Type& t,
const production::Meta& meta,
const std::optional<Expression>& dst,
503 std::vector<ParserState> _states;
504 std::vector<std::shared_ptr<hilti::builder::Builder>> _builders;
505 std::map<ID, Expression> _functions;
506 bool _report_new_value_for_field =
true;
Definition: function.h:71
void enableDefaultNewValueForField(bool enable)
Definition: parser-builder.h:405
auto builder()
Definition: parser-builder.h:221
bool isEnabledDefaultNewValueForField()
Definition: parser-builder.h:411
Expression trim
Definition: parser-builder.h:133
std::optional< Expression > captures
Definition: parser-builder.h:154
Expression data
Definition: parser-builder.h:121
Definition: production.h:120
Definition: parser-builder.h:92
ParserState state() const
Definition: parser-builder.h:180
Definition: parser-builder.h:163
void pushState(ParserState p)
Definition: parser-builder.h:171
void popState()
Definition: parser-builder.h:177
auto popBuilder()
Definition: parser-builder.h:233
Expression lahead_end
Definition: parser-builder.h:145
auto pushBuilder(std::shared_ptr< hilti::builder::Builder > b)
Definition: parser-builder.h:224
bool needs_look_ahead
Definition: parser-builder.h:115
Definition: parser-builder.h:240
ID unit_id
Definition: parser-builder.h:112
Expression cur
Definition: parser-builder.h:124
auto pushBuilder(std::shared_ptr< hilti::builder::Builder > b, const std::function< void()> &func)
Definition: parser-builder.h:257
Definition: location.h:17
Definition: parser-builder.cc:70
Expression error
Definition: parser-builder.h:159
Definition: location.h:93
std::reference_wrapper< const type::Unit > unit
Definition: parser-builder.h:109
ScopeGuard makeScopeGuard()
Definition: parser-builder.h:254