转行程序员如何学习编译原理基础(就是语法语义分析不涉及很深)感觉太抽象了完全无法入手但是又有实际需求

2024-02-27 16:13:53 +08:00
 la2la
我是 18 年毕业就转行做计算机方面,在五年的工作中自学了计算机原理跟计算机网络都对实际的开发工作帮助挺大的

现在有需求比如:
给标准的 sql 增加一些自定义的语法;
用一套 sql 语法来查询不同数据库;
给不支持 sql 的工具开发开发简单的查询引擎;

之前学习原理跟网络的时候用虚拟机操作操作看看教程背背八股文基本就够工作面试需要的了,但是现在面对处理这些 SQL 语句我都是用正则处理的,但是随着需求越来越多正则越来越复杂所以感觉还需要用一些类似于 antlr 这类的工具去做,但是现在网上关于这些编译之类的资料比较少很多都是很杂乱的
所以有没有推荐系统学习一下这个相关知识的书或者文章,我的需求是能系统的学习关于编译相关的名词的含义,能够解析语法书并能分析语义是否正确就差不多够用了
3350 次点击
所在节点    程序员
27 条回复
lff0305
2024-02-28 09:24:30 +08:00
学会用 antlr 就行了,感觉 antlr 不需要特别多的编译原理的东西
fredweili
2024-02-28 10:10:55 +08:00
要去找英文资料了
pangdundun996
2024-02-28 11:03:17 +08:00
用现成的 parser 库改改吧,拿到 AST 后自己操作,之前写的 sql-to-mongo 的 golang 库就是这个思路: https://github.com/tsfans/sql-to-mongo
masterclock
2024-02-28 11:44:18 +08:00
Apache calcite 直接搞定吧
levelworm
2024-02-28 21:54:36 +08:00
@dayeye2006199 我最近在读"Writing Interpreters and Compilers for the Raspberry Pi Using Python"这本书,感觉是最浅显最容易入门的。接下来如果有时间还准备读"Crafting Interpreters"这本书(可以网上免费读: https://craftinginterpreters.com/)

我觉得这两本书比教科书都容易一些,比较适合我这样的小白入门。
la2la
2024-02-29 15:56:18 +08:00
@a7851578 对,您说的这些如果做的特别深确实很难,我的需求没有这么深
1. 例如 FlinkSQL 或者 SparkSQL 有些功能不是很好用,我只想增加几个关键字来实现特定功能,执行还是 Flink 或者 Spark
2. 例如 HiveSQL 跟其他的一些数据库的 SQL 有些函数名称是不一样的但是功能一样,我想把 Hsql 中相关函数提取出来替换一下就行
3. 例如查询消息队列,会实现一个简单的 sql 语法然后后面解析查询,也没有啥性能需求能用就行
我也看了一点关于编译原理的东西,感觉我主要需求编译前端的一部分知识,后端的太难了我也搞不了
junmoxiao
2024-02-29 17:10:24 +08:00
学 antlr4

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1018858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX