# lexer **Repository Path**: WGrape/lexer ## Basic Information - **Project Name**: lexer - **Description**: 一个基于DFA的支持多语言扩展的JS版开源词法分析器 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: main - **Homepage**: http://wgrape.github.io/lexer/ - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-10-30 - **Last Updated**: 2024-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
## 3、获取项目
使用```git clone```获取本项目后,不需要任何依赖的安装,也不需多余的安装步骤
## 4、使用方式
### (1) 在代码中使用
如果有在代码中使用```lexer```的需求(如网页中的代码编辑器:高亮、代码提示等),只引入一个```/package/{lang}-lexer.min.js```文件即可
然后直接访问```lexer```变量即可获取到词法分析器对象,其中```tokens```数据可以通过访问```lexer.DFA.result.tokens```获取
```js
// 1. 需要词法分析的代码
let stream = "int a = 10;";
// 2. 开始词法分析
lexer.start(strem);
// 3. 词法分析结束后, 获取生成的tokens
let parsedTokens = lexer.DFA.result.tokens;
// 4. 做你想做的
parsedTokens.forEach((token) => {
// ... ...
});
```
功能介绍中所描述的[记录状态流转信息](#23),通过访问```flowModel.result.paths```即可获取到```lexer```内部状态机在每次状态流转时的详细信息,数据格式如下所示
```js
[
{
state: 0, // 当前状态
ch: "a", // 当前读入的字符
nextSstate: 2, // 下一个状态
match: true, // 是否匹配
end: false, // 是否是最后一个字符
},
// ... ...
]
```
### (2) 可视化预览与测试
为了实时查看```lexer```的工作效果,也方便对其进行开发测试,在项目根目录下有一个```index.html```文件,直接在浏览器中打开,输入代码后会自动输出经过```lexer```分析后生成的```Token```,如下图所演示
```c
int a = 10;
int b =20;
int c = 20;
float f = 928.2332;
char b = 'b';
if(a == b){
printf("Hello, World!");
}else if(b!=c){
printf("Hello, World! Hello, World!");
}else{
printf("Hello!");
}
```

或者请查看[线上网站](https://wgrape.github.io/lexer/)
## 5、参与贡献
### (1) 项目统计
## 6、协议说明
