PLCST 是一个专注于工业控制领域(PLC)脚本语言转换与分析的开源项目。目前,我正致力于构建一个高性能、模块化的静态语法检查器(Static Analyzer)。
本项目计划首先完成完整的 静态分析器,实现对 PLC 源代码(如 ST 语言等)的语义检查、类型校验和作用域分析,为后续的代码生成或解释执行打下坚实基础。
PLCST
├── st2c.antlr/ # ANTLR 自动生成的 Parser 与 Lexer (C# Target)
├── st2c.PLCException/ # 自定义异常类(如 PLCSemanticException)
├── st2c.PLCSymbolAndScope/ # 核心语义模型
│ ├── PLCSymbols/ # 符号定义(变量、函数、结构体等)
│ └── PLCScopeStack.cs # 作用域栈管理(Scope Management)
└── st2c.StaticCheckVisitor/ # 静态检查器核心
├── factory/ # 策略工厂 (Factory),负责分发 Strategy
├── register/ # 自动注册机制与 [StrategyForVisit] 特性
├── strategy/ # 语义检查策略池(按语法规则分类)
│ ├── variable_access/ # 变量访问相关策略 (THIS, Subscript 等)
│ ├── var_decls/ # 变量声明相关策略
│ └── ... # 其他语法规则策略
└── PLCVisitor.cs # 核心 Visitor,连接 ANTLR AST 与 Strategy
如果你想为项目添加一个新的静态检查规则,只需两步:
- 编写策略类:
[StrategyForVisit(RULE_your_rule_name)]
public class VisitYourRule : IStrategy {
public List<PLCSymbol> Invoke(ParserRuleContext ctx, PLCVisitor visitor) {
// 编写你的语义检查逻辑
return visitor.PackSymbols(new PLCSymbol(...));
}
}- 自动生效:
运行
Registrant.AutoRegister(),你的策略将自动注入系统,无需修改Visitor源代码。
- ANTLR4 驱动:使用 ANTLR4 进行高精度的词法和语法解析。
- 解耦的 Strategy 模式:每一个语法规则(Rule)的语义检查逻辑都被拆分为独立的
IStrategy实现类。 - 自动化注册机制:利用 C# 反射(Reflection)技术,只需给策略类加上
[StrategyForVisit]特性,即可实现自动加载与调用。 - 符号表管理:初步实现了基于
PLCSymbolAndScope的层级作用域与符号存储逻辑。
- .NET SDK (建议 6.0+)
- ANTLR 4.13+ (C# Target)
- IDE: Visual Studio 2022 或 JetBrains Rider
项目目前处于核心开发阶段,我们非常欢迎感兴趣的开发者加入:
- 完善 Strategy 逻辑:目前还有部分语法规则(如数组访问、复杂结构体嵌套)的策略类尚未完全实现。
- 语义规则补充:针对 PLC 特有的语言特性提供更严苛的静态检查规则。
- 文档与示例:完善 PLC 代码示例库。
欢迎 Fork 并提交 Pull Request! 每一个贡献对项目都至关重要。
- Fork 本项目。
- 创建你的特性分支 (
git checkout -b feature/AmazingStrategy)。 - 提交你的更改 (
git commit -m 'Add some AmazingStrategy')。 - 推送到分支 (
git push origin feature/AmazingStrategy)。 - 开启一个 Pull Request。
感谢plcst项目的初始开发者们。
感谢所有关注本项目并提供反馈的开发者。PLC 工业软件的国产化与开源化,离不开大家的共同努力。