[PATCH] D115856: [syntax][pseudo] Introduce the spec C++ grammar.

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 21 03:12:23 PST 2021


sammccall added inline comments.


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:12
+#  - attributes are omitted, which will be handled as comments;
+#  - we don't allow nullable non-terminal symbols (except translation-unit).
+#    There are few nullable non-terminals in the spec grammar, they are adjust
----------------
translation-unit appears to be non-nullable in the grammar here


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:13
+#  - we don't allow nullable non-terminal symbols (except translation-unit).
+#    There are few nullable non-terminals in the spec grammar, they are adjust
+#    to be non-nullable;
----------------
nit: adjusted


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:27
+# FIXME:
+#   - support annotations (lazy parsing, contextual identifiers)
+#   - empty input should be parsed successfully (special-case it?)
----------------
I think we should spell out what this is, or leave out the FIXME


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:28
+#   - support annotations (lazy parsing, contextual identifiers)
+#   - empty input should be parsed successfully (special-case it?)
+#
----------------
This probably isn't a FIXME for the grammar right? If we're going with non-nullable rules, having the *parser* special-case _ as nullable seems more sensible.


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:30
+#
+# start symbols
+_ := translation-unit
----------------
Is this "default start symbol"?
I believe we conceptually want to be able to start parsing at other symbols too.


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:33
+
+# A.1 gram.key
+typedef-name := IDENTIFIER
----------------
I'd suggest dropping the A.1 part, as it's version-specific

(e.g. gram.basic is currently A.4 at https://eel.is/c++draft/gram, which is a pretty common reference)


================
Comment at: clang/lib/Tooling/Syntax/Pseudo/cxx.bnf:44
+
+# A.3 grammar.basic
+# !Custom modifications to eliminate optional declaration-seq
----------------
nit: gram.basic


================
Comment at: clang/tools/clang-pseudo/ClangPseudo.cpp:1
+//===-- ClangPseudo.cpp - Clang pseudo parser tool ------------------------===//
+//
----------------
Can we use this tool to drive lit tests?


================
Comment at: clang/tools/clang-pseudo/ClangPseudo.cpp:41
+  auto Diagnostics = Grammar::build(*RSpecs).diagnose();
+  llvm::errs() << (Diagnostics.empty() ? "Parse grammar successfully!\n"
+                                       : llvm::join(Diagnostics, "\n"));
----------------
nit: parse -> parsed


================
Comment at: clang/tools/clang-pseudo/ClangPseudo.cpp:42
+  llvm::errs() << (Diagnostics.empty() ? "Parse grammar successfully!\n"
+                                       : llvm::join(Diagnostics, "\n"));
+  return 0;
----------------
do you want to dump the grammar? (Behind a dump-grammar subcommand)


================
Comment at: clang/tools/clang-pseudo/ClangPseudo.cpp:43
+                                       : llvm::join(Diagnostics, "\n"));
+  return 0;
+}
----------------
Diagnostics.empty() ? 0 : 2?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115856



More information about the cfe-commits mailing list