mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 16:01:04 +01:00
[executable semantics] Add Syntax driver (#362)
Slowly bringing this into line with Bison's C++ example parser so we can use strong semantic values for symbols rather than leaking pointers. First step is to thread a `ParseAndLexContext` object through the whole syntactic analysis state, like the example has. In the example, it's called `driver`. Co-authored-by: Geoff Romer <gromer@google.com>
This commit is contained in:
committed by
GitHub
co-authored by
Geoff Romer
parent
5375c01056
commit
07a37933c6
@@ -11,33 +11,46 @@
|
||||
#include <list>
|
||||
|
||||
#include "executable_semantics/syntax/syntax_helpers.h"
|
||||
#include "executable_semantics/syntax/parse_and_lex_context.h"
|
||||
}
|
||||
|
||||
%code requires {
|
||||
#include <optional>
|
||||
|
||||
#include "executable_semantics/ast/abstract_syntax_tree.h"
|
||||
#include "executable_semantics/ast/declaration.h"
|
||||
#include "executable_semantics/ast/field_list.h"
|
||||
#include "executable_semantics/ast/function_definition.h"
|
||||
|
||||
namespace Carbon {
|
||||
// A representation of the parsed program.
|
||||
using AST = std::list<Carbon::Declaration>*;
|
||||
class ParseAndLexContext;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
%code {
|
||||
|
||||
extern int yylineno;
|
||||
extern int yylex();
|
||||
|
||||
void yyerror(std::optional<Carbon::AST> const& parsedProgram, char* error) {
|
||||
Carbon::PrintSyntaxError(error, yylineno);
|
||||
void yyerror(
|
||||
std::optional<Carbon::AST> const& /* parsedProgram */,
|
||||
Carbon::ParseAndLexContext& context,
|
||||
char* message
|
||||
) {
|
||||
context.PrintDiagnostic(message, yylineno);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Parameters to yyparse and yylex.
|
||||
//
|
||||
|
||||
// "out" parameter passed to the parser, where the AST is written.
|
||||
%parse-param {std::optional<Carbon::AST>& parsedProgram}
|
||||
|
||||
// "inout" parameter passed to both the parser and the lexer.
|
||||
%param {Carbon::ParseAndLexContext& context}
|
||||
|
||||
%union {
|
||||
char* str;
|
||||
int num;
|
||||
|
||||
Reference in New Issue
Block a user