例程终结者 2022-09-13 16:28 采纳率: 90.5%
浏览 200
已结题

用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*

  • 写回答

2条回答 默认 最新

  • wanghui0380 2022-09-13 18:09
    关注

    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的人并不困难,一个星期就可以弄个稍微的“中文编程语言”出来了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 已采纳回答 9月15日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分