[PATCH] D130523: [pseudo] Perform unconstrained recovery prior to completion.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 19 06:14:13 PDT 2022


sammccall marked 2 inline comments as done.
sammccall added inline comments.


================
Comment at: clang-tools-extra/pseudo/lib/GLR.cpp:621
     // Consume the token.
     glrShift(Heads, Terminals[I], Params, Lang, NextHeads);
 
----------------
hokein wrote:
> hokein wrote:
> > I think we can move the Line634 `Heads.resize(HeadsPartition)` before the `glrShift()` as we only do shift on the nearly-created heads, we might gain some performance back.
> oops, my previous comment is incorrect, here we want the second part of the partition; while on recovery, we want the first part of partition.
> 
> we can pass `llvm::ArrayRef<const GSS::Node *>(Heads).drop_front(HeadsPartition);` as the Heads to `glrShift`.
> 
> 
As discussed offline, shifting onto a head that was produced by shift should be allowed.

given grammar
```
foo := [ ]
bar := [
baz := bar ]
```
and input `[]`, after `[` we have `Heads={ [, bar} }` with the former shifted and the latter reduced.
If we applied your suggestion here, we would fail to parse `foo` (but would succeed in parsing `baz`).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130523/new/

https://reviews.llvm.org/D130523



More information about the cfe-commits mailing list