summaryrefslogtreecommitdiff
path: root/willow/tools/willowc/lib/parser.cpp
diff options
context:
space:
mode:
authorStefan Weigl-Bosker <stefan@s00.xyz>2026-02-23 22:18:22 -0500
committerGitHub <noreply@github.com>2026-02-23 22:18:22 -0500
commit8f98dc579af1993ec85bd849656c4835b4039dd6 (patch)
tree3ee45620d83b209c1c11248afc9ab83ffcf39691 /willow/tools/willowc/lib/parser.cpp
parentc2d4209f85f46cc91163bc47cc43db252c94acf6 (diff)
downloadcompiler-8f98dc579af1993ec85bd849656c4835b4039dd6.tar.gz
[willow]: frontend plumbing (#13)
...
Diffstat (limited to 'willow/tools/willowc/lib/parser.cpp')
-rw-r--r--willow/tools/willowc/lib/parser.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/willow/tools/willowc/lib/parser.cpp b/willow/tools/willowc/lib/parser.cpp
index becc171..e658909 100644
--- a/willow/tools/willowc/lib/parser.cpp
+++ b/willow/tools/willowc/lib/parser.cpp
@@ -2,8 +2,27 @@
namespace willowc {
-std::optional<std::unique_ptr<ModuleAST>> parse() {
+std::optional<std::unique_ptr<ModuleAST>> Parser::run() {
+ bool failed = false;
+ while (true) {
+ Token t = tokenizer_.scan();
+ if (t.kind == TokenKind::Eof) {
+ willow::emit(diagnostic_engine_, willow::Severity::Debug)
+ << std::format("[ <eof> :: {} : ({}, {}) ]", t.kind, t.start, t.end);
+ break;
+ }
+ willow::emit(diagnostic_engine_, willow::Severity::Debug)
+ << std::format("[ '{}' :: {} : ({}, {}) ]",
+ tokenizer_.buf.substr(t.start, t.end - t.start), t.kind,
+ t.start, t.end);
+ }
+ return std::nullopt;
}
+willow::DiagnosticBuilder Parser::emitParserError(Token t, willow::Severity severity) {
+ willow::Location loc = file_.getLoc(t.start);
+ return willow::DiagnosticBuilder(diagnostic_engine_, severity, loc);
}
+
+} // namespace willowc