mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Separate parsing from type-checking and evaluation. (#345)
This change caused the syntax error in undef2.6c ("fun" instead of "fn") to be
detected as one would expect, thus the changed golden file.
This commit is contained in:
@@ -14,21 +14,30 @@
|
||||
}
|
||||
|
||||
%code requires {
|
||||
#include <optional>
|
||||
|
||||
#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>*;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
%code {
|
||||
extern int yylineno;
|
||||
extern int yylex();
|
||||
|
||||
void yyerror(char* error) {
|
||||
void yyerror(std::optional<Carbon::AST> const& parsedProgram, char* error) {
|
||||
Carbon::PrintSyntaxError(error, yylineno);
|
||||
}
|
||||
// void yyerror(char* error, ...);
|
||||
}
|
||||
|
||||
%parse-param {std::optional<Carbon::AST>& parsedProgram}
|
||||
|
||||
%union {
|
||||
char* str;
|
||||
int num;
|
||||
@@ -109,7 +118,7 @@ void yyerror(char* error) {
|
||||
%locations
|
||||
%%
|
||||
input: declaration_list
|
||||
{ Carbon::ExecProgram($1); }
|
||||
{ parsedProgram = $1; }
|
||||
;
|
||||
pattern:
|
||||
expression
|
||||
|
||||
Reference in New Issue
Block a user