Skip to content

Commit 447ab7f

Browse files
committed
docs: update visitor demo and listener demo
1 parent d4c97ef commit 447ab7f

File tree

2 files changed

+86
-57
lines changed

2 files changed

+86
-57
lines changed

README-zh_CN.md

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -156,27 +156,38 @@ console.log(tokens)
156156

157157
使用 Visitor 模式访问 AST 中的指定节点
158158

159-
```javascript
160-
import { MySQL, MySqlParserVisitor } from 'dt-sql-parser';
159+
```typescript
160+
import { MySQL, AbstractParseTreeVisitor } from 'dt-sql-parser';
161+
import type { MySqlParserVisitor } from 'dt-sql-parser';
161162

162-
const parser = new MySQL()
163-
const sql = `select id,name from user1;`
164-
// parseTree
165-
const tree = parser.parse(sql)
166-
class MyVisitor extends MySqlParserVisitor {
167-
// 重写 visitTableName 方法
163+
const parser = new MySQL();
164+
const sql = `select id,name from user1;`;
165+
const tree = parser.parse(sql);
166+
167+
type Result = string;
168+
169+
class MyVisitor extends AbstractParseTreeVisitor<Result> implements MySqlParserVisitor<Result> {
170+
protected defaultResult() {
171+
return '';
172+
}
168173
visitTableName(ctx) {
169-
let tableName = ctx.getText().toLowerCase()
170-
console.log('TableName', tableName)
174+
let tableName = ctx.text.toLowerCase();
175+
console.log('TableName', tableName);
176+
return '';
171177
}
172-
// 重写 visitSelectElements 方法
173178
visitSelectElements(ctx) {
174-
let selectElements = ctx.getText().toLowerCase()
175-
console.log('SelectElements', selectElements)
179+
let selectElements = ctx.text.toLowerCase();
180+
console.log('SelectElements', selectElements);
181+
return '';
182+
}
183+
visitProgram(ctx) {
184+
return 'Return by program node'
176185
}
177186
}
178-
const visitor = new MyVisitor()
179-
visitor.visit(tree)
187+
const visitor = new MyVisitor();
188+
const result = visitor.visit(tree);
189+
190+
console.log(result);
180191
```
181192

182193
*输出:*
@@ -186,6 +197,9 @@ visitor.visit(tree)
186197
SelectElements id,name
187198
TableName user1
188199
*/
200+
/*
201+
Return by program node
202+
*/
189203
```
190204

191205
> 提示:使用 Visitor 模式时,节点的方法名称可以在对应 SQL 目录下的 Visitor 文件中查找
@@ -194,25 +208,26 @@ TableName user1
194208

195209
Listener 模式,利用 [ANTLR4](https://github.com/antlr/antlr4) 提供的 `ParseTreeWalker` 对象遍历 AST,进入各个节点时调用对应的方法。
196210

197-
```javascript
198-
import { MySQL, MySqlParserListener } from 'dt-sql-parser';
211+
```typescript
212+
import { MySQL } from 'dt-sql-parser';
213+
import type { MySqlParserListener } from 'dt-sql-parser';
199214

200215
const parser = new MySQL();
201-
const sql = 'select id,name from user1;'
202-
// parseTree
203-
const tree = parser.parse(sql)
204-
class MyListener extends MySqlParserListener {
216+
const sql = 'select id,name from user1;';
217+
const parseTree = parser.parse(sql);
218+
219+
class MyListener implements MySqlParserListener {
205220
enterTableName(ctx) {
206-
let tableName = ctx.getText().toLowerCase()
207-
console.log('TableName', tableName)
221+
let tableName = ctx.text.toLowerCase();
222+
console.log('TableName:', tableName);
208223
}
209224
enterSelectElements(ctx) {
210-
let selectElements = ctx.getText().toLowerCase()
211-
log('SelectElements', selectElements)
225+
let selectElements = ctx.text.toLowerCase();
226+
console.log('SelectElements:', selectElements);
212227
}
213228
}
214229
const listenTableName = new MyListener();
215-
parser.listen(listenTableName, tree);
230+
parser.listen(listenTableName as MySqlParserListener, parseTree);
216231
```
217232

218233
*输出:*

README.md

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -163,35 +163,49 @@ console.log(tokens)
163163

164164
Traverse the tree node by the Visitor:
165165

166-
```javascript
167-
import { MySQL, MySqlParserVisitor } from 'dt-sql-parser';
166+
```typescript
167+
import { MySQL, AbstractParseTreeVisitor } from 'dt-sql-parser';
168+
import type { MySqlParserVisitor } from 'dt-sql-parser';
168169

169-
const parser = new MySQL()
170-
const sql = `select id,name from user1;`
171-
// parseTree
172-
const tree = parser.parse(sql)
173-
class MyVisitor extends MySqlParserVisitor {
174-
// overwrite visitTableName
170+
const parser = new MySQL();
171+
const sql = `select id,name from user1;`;
172+
const tree = parser.parse(sql);
173+
174+
type Result = string;
175+
176+
class MyVisitor extends AbstractParseTreeVisitor<Result> implements MySqlParserVisitor<Result> {
177+
protected defaultResult() {
178+
return '';
179+
}
175180
visitTableName(ctx) {
176-
let tableName = ctx.getText().toLowerCase()
177-
console.log('TableName', tableName)
181+
let tableName = ctx.text.toLowerCase();
182+
console.log('TableName:', tableName);
183+
return '';
178184
}
179-
// overwrite visitSelectElements
180185
visitSelectElements(ctx) {
181-
let selectElements = ctx.getText().toLowerCase()
182-
console.log('SelectElements', selectElements)
186+
let selectElements = ctx.text.toLowerCase();
187+
console.log('SelectElements:', selectElements);
188+
return '';
189+
}
190+
visitProgram(ctx) {
191+
return 'Return by program node'
183192
}
184193
}
185-
const visitor = new MyVisitor()
186-
visitor.visit(tree)
194+
const visitor = new MyVisitor();
195+
const result = visitor.visit(tree);
196+
197+
console.log(result);
187198
```
188199

189200
*output:*
190201

191202
```javascript
192203
/*
193-
SelectElements id,name
194-
TableName user1
204+
SelectElements: id,name
205+
TableName: user1
206+
*/
207+
/*
208+
Return by program node
195209
*/
196210
```
197211

@@ -201,34 +215,34 @@ TableName user1
201215

202216
Access the specified node in the AST by the Listener
203217

204-
```javascript
205-
import { MySQL, MySqlParserListener } from 'dt-sql-parser';
218+
```typescript
219+
import { MySQL } from 'dt-sql-parser';
220+
import type { MySqlParserListener } from 'dt-sql-parser';
206221

207222
const parser = new MySQL();
208-
const sql = 'select id,name from user1;'
209-
// parseTree
210-
const tree = parser.parse(sql)
211-
class MyListener extends MySqlParserListener {
223+
const sql = 'select id,name from user1;';
224+
const parseTree = parser.parse(sql);
225+
226+
class MyListener implements MySqlParserListener {
212227
enterTableName(ctx) {
213-
let tableName = ctx.getText().toLowerCase()
214-
console.log('TableName', tableName)
228+
let tableName = ctx.text.toLowerCase();
229+
console.log('TableName:', tableName);
215230
}
216231
enterSelectElements(ctx) {
217-
let selectElements = ctx.getText().toLowerCase()
218-
console.log('SelectElements', selectElements)
232+
let selectElements = ctx.text.toLowerCase();
233+
console.log('SelectElements:', selectElements);
219234
}
220235
}
221236
const listenTableName = new MyListener();
222-
parser.listen(listenTableName, tree);
223-
237+
parser.listen(listenTableName as MySqlParserListener, parseTree);
224238
```
225239

226240
*output:*
227241

228242
```javascript
229243
/*
230-
SelectElements id,name
231-
TableName user1
244+
SelectElements: id,name
245+
TableName: user1
232246
*/
233247
```
234248

0 commit comments

Comments
 (0)