mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 06:34:41 +01:00
Extend description of parser states to show which tokens they consume. (#3378)
Also some minor improvements and typo fixes to the parser code for issues found while writing these descriptions.
This commit is contained in:
@@ -120,6 +120,9 @@ class Context {
|
||||
// Returns the current position and moves past it.
|
||||
auto Consume() -> Lex::Token { return *(position_++); }
|
||||
|
||||
// Consumes the current token. Does not return it.
|
||||
auto ConsumeAndDiscard() -> void { ++position_; }
|
||||
|
||||
// Parses an open paren token, possibly diagnosing if necessary. Creates a
|
||||
// leaf parse node of the specified start kind. The default_token is used when
|
||||
// there's no open paren. Returns the open paren token if it was found.
|
||||
|
||||
@@ -53,7 +53,7 @@ auto HandleExpr(Context& context) -> void {
|
||||
*operator_precedence);
|
||||
}
|
||||
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
context.PushStateForExpr(*operator_precedence);
|
||||
} else {
|
||||
context.PushStateForExprLoop(State::ExprLoop, state.ambient_precedence,
|
||||
|
||||
@@ -24,10 +24,10 @@ auto HandleFunctionAfterParameters(Context& context) -> void {
|
||||
context.PushState(state);
|
||||
|
||||
// If there is a return type, parse the expression before adding the return
|
||||
// type nod.e
|
||||
// type node.
|
||||
if (context.PositionIs(Lex::TokenKind::MinusGreater)) {
|
||||
context.PushState(State::FunctionReturnTypeFinish);
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
context.PushStateForExpr(PrecedenceGroup::ForType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ auto HandleStatement(Context& context) -> void {
|
||||
case Lex::TokenKind::For: {
|
||||
context.PushState(State::StatementForFinish);
|
||||
context.PushState(State::StatementForHeader);
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
break;
|
||||
}
|
||||
case Lex::TokenKind::If: {
|
||||
@@ -108,7 +108,7 @@ auto HandleStatementForHeader(Context& context) -> void {
|
||||
|
||||
if (auto next_in = context.FindNextOf({Lex::TokenKind::In})) {
|
||||
context.SkipTo(*next_in);
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
}
|
||||
state.has_error = true;
|
||||
context.PushState(state);
|
||||
@@ -143,7 +143,7 @@ auto HandleStatementIf(Context& context) -> void {
|
||||
|
||||
context.PushState(State::StatementIfConditionFinish);
|
||||
context.PushState(State::ParenConditionAsIf);
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
}
|
||||
|
||||
auto HandleStatementIfConditionFinish(Context& context) -> void {
|
||||
@@ -218,7 +218,7 @@ auto HandleStatementWhile(Context& context) -> void {
|
||||
|
||||
context.PushState(State::StatementWhileConditionFinish);
|
||||
context.PushState(State::ParenConditionAsWhile);
|
||||
++context.position();
|
||||
context.ConsumeAndDiscard();
|
||||
}
|
||||
|
||||
auto HandleStatementWhileConditionFinish(Context& context) -> void {
|
||||
|
||||
+505
-195
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user