Skip to content
This repository was archived by the owner on Feb 28, 2026. It is now read-only.

angleyanalbedo/ST2C

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PLCST Project

PLCST 是一个专注于工业控制领域(PLC)脚本语言转换与分析的开源项目。目前,我正致力于构建一个高性能、模块化的静态语法检查器(Static Analyzer)

🎯 项目愿景

本项目计划首先完成完整的 静态分析器,实现对 PLC 源代码(如 ST 语言等)的语义检查、类型校验和作用域分析,为后续的代码生成或解释执行打下坚实基础。

🏗 当前进展

我们目前正在从 Java 架构全面迁移并完善 C# 版本的策略模式(Strategy Pattern) 实现。

📂 项目结构 (Project Structure)

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


🚀 快速开始示例 (Quick Start)

如果你想为项目添加一个新的静态检查规则,只需两步:

  1. 编写策略类
[StrategyForVisit(RULE_your_rule_name)]
public class VisitYourRule : IStrategy {
    public List<PLCSymbol> Invoke(ParserRuleContext ctx, PLCVisitor visitor) {
        // 编写你的语义检查逻辑
        return visitor.PackSymbols(new PLCSymbol(...));
    }
}
  1. 自动生效: 运行 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

🤝 欢迎贡献 (Welcome to Fork)

项目目前处于核心开发阶段,我们非常欢迎感兴趣的开发者加入:

  1. 完善 Strategy 逻辑:目前还有部分语法规则(如数组访问、复杂结构体嵌套)的策略类尚未完全实现。
  2. 语义规则补充:针对 PLC 特有的语言特性提供更严苛的静态检查规则。
  3. 文档与示例:完善 PLC 代码示例库。

欢迎 Fork 并提交 Pull Request! 每一个贡献对项目都至关重要。

如何参与?

  1. Fork 本项目。
  2. 创建你的特性分支 (git checkout -b feature/AmazingStrategy)。
  3. 提交你的更改 (git commit -m 'Add some AmazingStrategy')。
  4. 推送到分支 (git push origin feature/AmazingStrategy)。
  5. 开启一个 Pull Request。

🙏 鸣谢

感谢plcst项目的初始开发者们。

感谢所有关注本项目并提供反馈的开发者。PLC 工业软件的国产化与开源化,离不开大家的共同努力。


About

convert ST code to C code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors