无扫描器广义LR解析器的消歧过滤器与模块化静态程序分析
无扫描器广义LR解析器(SGLR)
语法定义与应用
SGLR 相关技术涉及多种通用和特定领域语言的语法定义,如 Cobol、Java、SDL、Stratego、YACC 和 XML 等。许多语法定义是通过 XT 的语法操作工具从 LEX/YACC 定义半自动化重构而来,使得语法定义更加紧凑。基于 Sdf/SGLR 的解析器已在众多使用 XT 构建的项目中得到应用,涵盖软件翻新、语法恢复、程序优化和编译器构建等领域。
基准测试
对 SGLR 实现进行了基准测试,通过解析大量大文件并测量用户时间。以下是相关测试结果:
- 解析速度 :
| 语法 | 平均文件大小 | 有过滤器和解析树构建时的字符/秒 | 无过滤器和解析树构建时的字符/秒 |
| ---- | ---- | ---- | ---- |
| ATerms | 106,000 字符 | 108,000 | 340,000 |
| BibTEX | 455,000 字符 | 85,000 | 405,000 |
| Box | 80,000 字符 | 34,000 | 368,000 |
| Cobol | 170,000 字符 | 58,000 | 146,000 |
| Java | 105,000 字符 | 37,000 | 210,000 |
| Java (LR1) | 105,000 字符 | 53,000 | 242,000 |
从这个表格可以看出,解析器速度足以满足工业应用。同时,