## Parser的外部交互流程图

```sequence
Title:editor-parser模块交互流程图
participant 前端项目 as A
participant editor_parser模块 as B
participant 后端项目 as C

A -> B : 1.发起SQL解析请求(参数对象：EditorContext)
B -> B : 2.完成解析动作
B --> A : 3.返回解析出来的需要补全的对象(参数对象：CodeCompletionRequest)
A -> C : 4.请求补全列表(参数对象:CodeCompletionRequest)
C --> A : 5.返回补全列表(参数对象:list)
A ->A : 6.处理成Monaco补全的样式
A -> A : 7.进行补全提示


```


![parser交互时序图.png](parser交互时序图.png)



### 交互说明：

editor-parser模块

当前的语法解析模块，现阶段不区分SQL语言类型。

该模块被前端项目引用，该模块功能单一，仅处理SQL解析的问题，不处理提示的问题，提示的问题请在前端项目中完成。

该模块对前端项目仅暴露一个方法，该方法签名为：

```typescript
/**
* 处理前端项目需要解析的SQL
* 参数：editorContext，编辑器上的内容和当前编辑器的一些参数
* 返回值: CodeCompletionRequest, 该对象表名当前需要补全的类型是什么
*/
parser(editorContext: EditorContext): CodeCompletionRequest{
  
}
```



### editor-parser模块内部说明

```sequence
Title:editor-parser模块内部时序图
participant client处理请求 as A
participant parser解析器 as B
participant symbolTable符号表 as C


A -> A : 1.检查数据EditorContext是否符合规范
A -> B : 2.交由parser进行解析
B -> C : 3.parser的监听器在解析过程中生成符号表
C --> B : 4.构建符号表完成
A -> B : 5.根据光标所在位置找到AST上对应的Token
B-->A: 6.返回当前光标所在Token
A -> C : 7.根据Token在符号表中查找是否有对应的变量Token
C --> A: 8.返回符号表中对应的变量Token
A -> A: 9.生成CodeCompletionRequest，并返回



```

![parser内部时序图.png](parser内部时序图.png)