mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-05-27 10:15:30 +08:00
Update TODO_ParserGen.md
This commit is contained in:
+26
-8
@@ -97,32 +97,50 @@ class CLASS_NAME [: BASE_CLASS]
|
|||||||
|
|
||||||
## Development Project Structure
|
## Development Project Structure
|
||||||
- Original ParserGen code will be separated from Vlpp.
|
- Original ParserGen code will be separated from Vlpp.
|
||||||
|
- **Development Steps**
|
||||||
|
1. Symbols for ParserGen AST
|
||||||
|
2. Manually: symbols -> `ParserGen AST described in C++`
|
||||||
|
3. Manually: ParserGen Syntax described in `ParserGen AST described in C++` -> `ParserGen Parser described in C++`
|
||||||
|
4. Integrate
|
||||||
- **AstGen**:
|
- **AstGen**:
|
||||||
|
- **Goal**: given symbols and generated C++ code for AST
|
||||||
|
- **Produce** (from unit test):
|
||||||
|
- Generated source code (AST part): declaration, visitors, builder, reflection for ParserGen input
|
||||||
- AST symbols and C++ code generation.
|
- AST symbols and C++ code generation.
|
||||||
- Generate visitors.
|
- Generate visitors.
|
||||||
- Generate easy builder.
|
- Generate easy builder.
|
||||||
- Generate reflection.
|
- Generate reflection.
|
||||||
- Symbol serialization (this is not exposed on the final ParserGen.exe)
|
|
||||||
- **Execution**:
|
- **Execution**:
|
||||||
|
- **Goal**: given instructions and parse input text with SAX-like callback
|
||||||
- Parser-generated instructions serialization.
|
- Parser-generated instructions serialization.
|
||||||
- Execute instructions as a SAX-like parser, with notification on ambigious node, error message generation and error recovering.
|
- Execute instructions as a SAX-like parser, with notification on ambiguous node, error message generation and error recovering.
|
||||||
- **Compiler**: depends on **AstGen** and **Execution**, taking the generated `AST for ParserGen`.
|
- **Compiler** -> **AstGen**, **Execution**
|
||||||
- Take the `AST for ParserGen` and generate instructions.
|
- **Goal**: input described using `Generated source code (AST part)` and generate instructions (text parser)
|
||||||
|
- **Produce** (from unit test)
|
||||||
|
- Generated C++ source code (parser part) for ParserGen input
|
||||||
|
- Take the `ParserGen AST declaration` and generate instructions.
|
||||||
- Generate the default handler to create AST for the SAX-like parser.
|
- Generate the default handler to create AST for the SAX-like parser.
|
||||||
- ToString algorithm.
|
- ToString algorithm.
|
||||||
- Bidirection binding with AST the text.
|
- Bidirection binding with AST the text.
|
||||||
- **ParserGen**: depends on **Compiler**, taking the generated parser and the default handler to create AST for `AST for ParserGen`.
|
- **ParserGen** -> **Compiler**
|
||||||
- All code integrating together.
|
- **Goal**: CLI Tool
|
||||||
|
- Integrate `Generated source code (AST part)`
|
||||||
|
- Integrate `Generated source code (parser part)`
|
||||||
|
- Handle command line arguments
|
||||||
- **UnitTestAst**:
|
- **UnitTestAst**:
|
||||||
- Unit test of **AstGen** building block and pool allocation etc.
|
- Unit test of **AstGen** building block and pool allocation etc.
|
||||||
- Hand-written `AST for ParserGen` symbols and codegen it, with all visitors and the easy builder.
|
- **Produces** steps
|
||||||
|
- Hand-written `AST for ParserGen` symbols.
|
||||||
|
- Codegen symbols and get `Generated source code (AST part)` for ParserGen input
|
||||||
- **UnitTestExecution**:
|
- **UnitTestExecution**:
|
||||||
- Unit test of **Execution**.
|
- Unit test of **Execution**.
|
||||||
- Assert directly on SAX-like parser.
|
- Assert directly on SAX-like parser.
|
||||||
- **UnitTestCompiler**:
|
- **UnitTestCompiler**:
|
||||||
- Unit test of **Compiler**, input are all **UnitTestExecution** test cases rewritten using the generated easy-builder for `AST for ParserGen` AST.
|
- Unit test of **Compiler**, input are all **UnitTestExecution** test cases rewritten using the generated easy-builder for `AST for ParserGen` AST.
|
||||||
- Assert on the ToString-ed AST. (shared)
|
- Assert on the ToString-ed AST. (shared)
|
||||||
- One of the test case will take the syntax of `AST for ParserGen` itself, with the symbol directly for the AST, and serialize instructions to a cpp file, so that we create a parser in C++ to parse the input of the ParserGen.
|
- **Produces** steps
|
||||||
|
- Implementa ParserGen AST Input syntax using generated easy builder form `Generated source code (AST part)`
|
||||||
|
- Serialize instructions and get `C++ source code (parser part)` for ParserGen input
|
||||||
- **UnitTestParserGen**:
|
- **UnitTestParserGen**:
|
||||||
- Unit test of **ParserGen**, input are all **UnitTestExecution** test cases rewritten in text format.
|
- Unit test of **ParserGen**, input are all **UnitTestExecution** test cases rewritten in text format.
|
||||||
- Assert on the ToString-ed AST. (shared)
|
- Assert on the ToString-ed AST. (shared)
|
||||||
|
|||||||
Reference in New Issue
Block a user