用C,C#,C++,编写程序,读取Gerber文件,导出其元件类型,元件中心坐标信息,放置角度信息,该如何下手?

问题遇到的现象和发生背景

用C,C#,C++,编写程序,读取Gerber文件,导出其元件类型,元件中心坐标信息,放置角度信息,该如何下手?

问题相关代码,请勿粘贴截图

Gerber指令代码
%FSLAX34Y34*% FS 格式描述 L 省略前导零,A 绝对坐标,三位整数,四位小数
%MOMM*% MO Mode 单位 MM 毫米
%ADD70C,0.000000*% AD Aperture Definition 光圈描述 定义D70码为圆,直径 0MM
%ADD71C,0.300000*%
%LNConvertedAllPolygons*% LN 层名 ConvertedAllPolygons
%LPD*% LP 层正负性 D 设置为正图
G36* G36 打开多边形填充
X635760Y1095810D02* D02 关光圈,移动到 X63 5760 Y109 5810
X632760Y1095810D01* D01 划线,开光圈 X63 2760 Y109 5810
G75* G75 启用 360°的画圆功能
G03X631760Y1094720I-4J-999D01* G03 逆时针圆周运动 I,J 格式描述弧形位置。
G74* G74 关闭 360 度圆周运动
G01* G01 1 倍线性运动
X631760Y1091810D01* 光圈说白了就是形状,不同的光圈就是不同的形状。pcb里面常见的形状有,圆形、方形、椭圆等等。
G75* 分别表示某个焊盘的形状
G03X632760Y1090810I996J1D01*

https://github.com/integralpro/libpger/blob/master/antlr/Gerber.g

通常这类文法解析都采用通用文法解析器完成,常见的文法解析引擎是antlr,yacc,Babel
当然上学的时候编译原理的老师一般会教BNF+yacc,不过现在实际应用的比较多是antlr,babel
antlr4下比较常见的语言的文法解析规则在下面
https://github.com/antlr/grammars-v4

可惜你这个Gerber实在是个小众偏门DSL,所以anltr4没有收集,我只找到一个很多年前anltr3的定义
https://github.com/integralpro/libpger/blob/master/antlr/Gerber.g

我们可以参考这个写出Antlr4的解析文法(如果你有兴趣的学学anltr4的话)

有关如何在C#里用antlr4,我到不用赘述了。这种文章到多,随便百度一下就行。

随带说一句:如果知道这些,就可以摆脱那些语言之争和某某园子偶尔会折腾的啥中文编程,我实现了一门语言这类东西。
单纯文法词法分析目前并不困难,难的是你用词法分析器是人家的,你最后的对语法树的编译是人家的。所以仅仅说自己实现一个DSL文法,对一个会玩antlr的人并不困难,一个星期就可以弄个稍微的“中文编程语言”出来了

Gerber文件 应该是使用ASCll编码,应该不用过多考虑编码问题,直接把它当成文本文档处理就好了;
那么你后面的工作就是从字符串中提取关键信息;使用正则表达式式一个比较方便的办法