mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
@@ -134,6 +134,8 @@
|
||||
%type <Nonnull<Expression*>> and_expression
|
||||
%type <Nonnull<Expression*>> or_lhs
|
||||
%type <Nonnull<Expression*>> or_expression
|
||||
%type <Nonnull<Expression*>> statement_expression
|
||||
%type <Nonnull<Expression*>> if_expression
|
||||
%type <Nonnull<Expression*>> expression
|
||||
%type <Nonnull<GenericBinding*>> generic_binding
|
||||
%type <std::vector<Nonnull<AstNode*>>> deduced_params
|
||||
@@ -216,6 +218,7 @@
|
||||
SEMICOLON
|
||||
SLASH
|
||||
STRING
|
||||
THEN
|
||||
TRUE
|
||||
TYPE
|
||||
UNDERSCORE
|
||||
@@ -477,12 +480,20 @@ or_expression:
|
||||
std::vector<Nonnull<Expression*>>({$1, $3}));
|
||||
}
|
||||
;
|
||||
expression:
|
||||
statement_expression:
|
||||
ref_deref_expression
|
||||
| predicate_expression
|
||||
| and_expression
|
||||
| or_expression
|
||||
;
|
||||
if_expression:
|
||||
statement_expression
|
||||
| IF expression THEN if_expression ELSE if_expression
|
||||
{ $$ = arena->New<IfExpression>(context.source_loc(), $2, $4, $6); }
|
||||
;
|
||||
expression:
|
||||
if_expression
|
||||
;
|
||||
designator: PERIOD identifier { $$ = $2; }
|
||||
;
|
||||
paren_expression: paren_expression_base
|
||||
@@ -645,11 +656,11 @@ clause_list:
|
||||
}
|
||||
;
|
||||
statement:
|
||||
expression EQUAL expression SEMICOLON
|
||||
statement_expression EQUAL expression SEMICOLON
|
||||
{ $$ = arena->New<Assign>(context.source_loc(), $1, $3); }
|
||||
| VAR pattern EQUAL expression SEMICOLON
|
||||
{ $$ = arena->New<VariableDefinition>(context.source_loc(), $2, $4); }
|
||||
| expression SEMICOLON
|
||||
| statement_expression SEMICOLON
|
||||
{ $$ = arena->New<ExpressionStatement>(context.source_loc(), $1); }
|
||||
| if_statement
|
||||
{ $$ = $1; }
|
||||
|
||||
Reference in New Issue
Block a user