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


================
Comment at: clang-tools-extra/pseudo/include/clang-pseudo/grammar/LRTable.h:136
+  // check whether a reduction should apply in the current context.
+  llvm::ArrayRef<RuleID> getReduceRules(StateID State) const {
+    return llvm::makeArrayRef(&Reduces[ReduceOffset[State]],
----------------
hokein wrote:
> I think the API is motivated by the LR(0) experimentation, we're now 
> decoupling the reduction look up from the lookahead token, this seems nice 
> (LR(0) only needs `getReduceRules`, other LR(1) variant need `getReduceRules` 
> + `canFollow`).
> 
> The API usage for SLR(1) is not quite straight forward at the first glance,  
> would be better to add a small snippet in the comment.
Added.

In fact it wasn't motivated by the LR(0) stuff, at least not 
consciously/directly.
Rather I just wanted to avoid having to allocate a data structure to copy a 
filtered list into!


================
Comment at: clang-tools-extra/pseudo/lib/grammar/LRTableBuild.cpp:116
+  llvm::DenseMap<StateID, llvm::SmallSet<RuleID, 4>> Reduces;
+  std::vector<llvm::DenseSet<SymbolID>> FollowSets;
+
----------------
hokein wrote:
>  make these members as private -- having two public members seems to violate 
> the pattern. (FollowSets can be initialized in the constructor, we might need 
> a separate method for `Reduces`. or either change the Builder to a struct).
This whole class is private and exists purely for the convenience of 
buildSLR()/buildForTests, I don't think adding wrapping methods really helps 
them out.

Changed Builder to a struct and made everything public.


================
Comment at: clang-tools-extra/pseudo/unittests/LRTableTest.cpp:42
+
+  //           eof   semi   term   reduce
+  // +-------+----+-------+------+-------
----------------
hokein wrote:
> the row is usual for terminals,  and the reduce is a separate table, which 
> seems a bit confusing -- I would probably split the reduce table out (adding 
> an empty col between term and reduce)
I moved it to a separate (1D) table above ReduceEntries, and at that point it 
looked exactly like the definition of ReduceEntries.

So I don't think it adds anything that's not obvious from the code, I dropped 
the comment.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128472

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to