What do you use parser generator tools for? What kind of features would you like to see in a tool like JavaCC 21?
Uses:
Migration studies of whole software products (5000+ source files) from one language (Cobol, Uniface, SQL, PL/SQL, Forms, Gembase, Pascal UCSD) to another one:
- get the list / metrics of instructions / functions / constructs / mechanisms / … used in the product, to enable precise work load evaluation
Real migrations:
- translate the source code in another language, 100% automatic in CI
Dev / code quality tools: - list / count / refactor non internationalized character strings
- reveal scripts syntax errors before commiting
- cartography (call trees)
Plugins dev:
- develop an Eclipse plugin for these languages and custom tools around (standardized code generation, code quality control, build tools, automated actions…)
Features needed as a user (in decreasing order):
- use of JTB as a the node builder tool
- better execution performance compared to JavaCC 5.0 / 8.x
- support in Eclipse or IntelliJ Plugin at least as good as the current Eclipse JavaCC Plugin
- ability to control the generated code:
- to pass customers code quality standards (# and types of warnings, cyclomatic complexity, Sonar metrics, OWASP…)
- to tune the generated methods (performance, integration)
- support of OpenJDK and Oracle Java releases (ie user can generate classes that compile with 1.8 … 15+ as he chooses)
- no imposed third party tools, only at the user’s choice (ex: can choose his template engine, like FreeMarker or Velocity) (for complying with customer’s licensing or frameworks standards)
- better lookahead debug trace (proper identation, output limited to the problematic branch, better reasons / navigation information for the failed lookaheads) (that’s where I loose time writing grammars)
- the ability to declare that a token can be matched by a more general token (in another post)
- explanation of the purposes / algorithms of the lexer / parser generated methods (to help understanding problems and to be able to propose improvements / tunings for the generated code)
- native support for calling sub-parsers
- support of Kotlin (actions in Kotlin, Kotlin generated classes)
- ability to use the generated parsers as a fully java language class (inheritance, functional programming)
Features needed as a contributor:
TBD somewhere else