Spaces:
Running
Running
| # TGN (Trigo Game Notation) Parser | |
| This directory contains the TGN parser implementation for reading and writing Trigo game notation files. | |
| ## Files | |
| - **`tgn.jison`** - Grammar definition for TGN format (similar to PGN for chess) | |
| - **`tgnParser.ts`** - TypeScript wrapper providing type-safe API for the parser | |
| - **`tgn.jison.cjs`** - Generated parser (auto-generated, gitignored) | |
| ## Building the Parser | |
| The parser is generated from the jison grammar file. To rebuild: | |
| ```bash | |
| npm run build:parsers | |
| ``` | |
| Or specifically for TGN: | |
| ```bash | |
| npm run build:parser:tgn | |
| ``` | |
| This will generate `tgn.jison.cjs` from `tgn.jison`. | |
| ## Usage | |
| Import the parser functions from the game module: | |
| ```typescript | |
| import { TrigoGame, validateTGN, TGNParseError } from "@inc/trigo/game"; | |
| // Parse TGN and create game instance | |
| const tgn = ` | |
| [Event "Test Game"] | |
| [Board 5x5x5] | |
| 1. 000 y00 | |
| 2. 0y0 Pass | |
| `; | |
| try { | |
| const game = TrigoGame.fromTGN(tgn); | |
| console.log("Game loaded successfully!"); | |
| } catch (error) { | |
| if (error instanceof TGNParseError) { | |
| console.error("Parse error at line", error.line); | |
| } | |
| } | |
| // Validate TGN without parsing | |
| const result = validateTGN(tgn); | |
| if (result.valid) { | |
| console.log("Valid TGN"); | |
| } else { | |
| console.error("Invalid TGN:", result.error); | |
| } | |
| ``` | |
| ## TGN Format | |
| TGN format consists of: | |
| 1. **Metadata tags** - Key-value pairs in square brackets | |
| 2. **Move sequence** - Numbered rounds with moves in ab0yz coordinate notation | |
| Example: | |
| ```tgn | |
| [Event "World Championship"] | |
| [Site "Tokyo"] | |
| [Date "2025.10.31"] | |
| [Black "Alice"] | |
| [White "Bob"] | |
| [Board 5x5x5] | |
| [Rules "Chinese"] | |
| 1. 000 y00 | |
| 2. 0y0 yy0 | |
| 3. aaa Pass | |
| ``` | |
| ### Coordinate Notation (ab0yz) | |
| - `0` = center position | |
| - `a`, `b`, `c`, ... = positions from one edge toward center | |
| - `z`, `y`, `x`, ... = positions from opposite edge toward center | |
| Examples for 5×5×5 board: | |
| - `000` = center (2,2,2) | |
| - `aaa` = corner (0,0,0) | |
| - `zzz` = opposite corner (4,4,4) | |
| - `y00` = (4,2,2) | |
| For 2D boards (e.g., 19×19×1), only two coordinates are used: | |
| - `00` = center | |
| - `aa` = corner | |
| ## Development | |
| The parser is built using [Jison](https://github.com/zaach/jison), a JavaScript parser generator similar to Bison/Yacc. | |
| **Note:** Generated files (`*.jison.cjs`, `*.jison.js`) are gitignored and must be built locally or in CI/CD. | |
| ## Related Documentation | |
| - [TGN Format Specification](../../docs/tgn-format-spec.md) | |
| - [Parser Development Guide](../../docs/README.tgn.md) | |