由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 哪种脚本语言适合做代码的文本分析?
相关主题
脚本语言 vs 编译语言接触scala两年了
转贴:[圣战] python 是个讨厌的语言[合集] 到底要学习Perl,还是Python?
现在学LLVM有没有前途现在还在“学”脚本语言的,都弱爆了
hci, Clojure有类似windows COM那种东西吗?clojure 做数据分析
Initialization list的一个问题vert.x就是脚本语言们的企业版
g++编译了不该过的C++代码王垠的这篇写的不错
老码农冒死揭开行业黑幕:如何编写无法维护的代码(zz)jvm上3大脚本语言
FP内部比较: Haskell其实可以当脚本语言来用Perl程序员工作机会多吗?
相关话题的讨论汇总
话题: 代码话题: 初始化话题: 定义话题: 芯片话题: 文本
进入Programming版参与讨论
1 (共1页)
g****t
发帖数: 31659
1
(1)
例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
义函数f(.),然后写下:
定义 f(.)
f(x)
f(y)
三段
另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
一块包含x的代码
一块包含为y的代码
现在问题来了,哪种脚本语言适合第二种方法这样的任务?有没有现成的工具?第二种
方法的好处是等于实现了一小部分编译器的功能。好处是,第二种方法出来的代码,和
函数定义的语法无关。将来就算语言版本换了,也不需要担心它不work。
简单说,我理解的现在的coding,先按最容易理解最有效率的方式写代码,然后编译。
这两部分任务是分开的。但我认为,写好的代码,应该有个专门的工具给它自动整理下
,或者半编译下,然后这个半编译后的版本对高度抽象复杂的语言定义依赖性较少,今
后换到别的芯片上用,也就没问题。
(2)
我碰到过的一个具体问题就是从一个芯片自有的C代码换到另一个芯片的C。这两个C有
细微不同的定义和编译器。
(例如浮点数不初始化是否自动初始化为0;
例如unsigned number和signed number比较的结果)我的想法是,如果能找个工具把这
些可疑的语法特征都还原成更基本的语法特征,那今后就省很多事。例如我可以查所有
浮点数初始化的地方,然后没有初始化的地方,都加上初始化。现在有适合这种任务的
工具吗?
(3)
总结下,给了一种语言A,以及写成的代码段source1。
我现在定义了语言A的比较靠谱和简单的子集a。
现在想把source 1通过自动查找粘贴分析的办法转成a写成的代码 source 2
这样做的好处是对未来可能的语言和编译器以及硬件变化更roubust。有这样的工具吗
?如果没有,大家认为哪种脚本语言适合这样的任务?
(4)
前面的想法,是关于提高robust的。
同样,也可以用于分析和自动重写源代码,把代码提升到超集AA,来提高速度。我相信
这种代码优化肯定是很多软工熟悉的实践。问题来了?你们软工用的什么工具?能介绍
下吗?
p***o
发帖数: 1252
2
llvm

【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码

g****t
发帖数: 31659
3
llvm是通用一个机器模型还是可以自己定义模型?
例如我的芯片现在是买的instruction set,也能优化吗?
另外我做描述的这些事,哪种语言或者IDE方便些呢?
p***o
发帖数: 1252
4
你的解决方案似乎和通常的差别比较大,没市场自然也就没人做。
一般都手写个HAL把硬件相关的东西独立出来,剩下的都是标准C/C++,用LLVM处理成
IR再编译到你的芯片。LLVM的好处是可以从IR开始加自己的东西,啥都可以,比如
emscripten和AutoESL。

【在 g****t 的大作中提到】
: llvm是通用一个机器模型还是可以自己定义模型?
: 例如我的芯片现在是买的instruction set,也能优化吗?
: 另外我做描述的这些事,哪种语言或者IDE方便些呢?

g****t
发帖数: 31659
5
我去看看llvm,thanks for the information.
(1)
小芯片很多都不是标准C。我们是特制的。
标准c为基础的芯片我预测会今后在美国很
难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
我关注的主要是代码的robustness with respect to different future C
compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
所以需求是有的。
之类的书里面有详细讲这些隐含在C的不同compiler实现的坑。
但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。
(2)
因为速度和鲁棒性通常是duality,所以我觉得CS的人肯定已经有了compiler
middleware做速度。所以想看看是不是可以借鉴下。
p***o
发帖数: 1252
6
定制的东西可以很鲁棒也可以很不鲁棒,关键是看做芯片的公司养不养得起做
编译器的队伍。你怕赔几十M,可是你一年愿意出多少钱呢?最终的结果要么
是编译器bug越来越多,要么是前端用开源的东西比如llvm来节省人力成本。

【在 g****t 的大作中提到】
: 我去看看llvm,thanks for the information.
: (1)
: 小芯片很多都不是标准C。我们是特制的。
: 标准c为基础的芯片我预测会今后在美国很
: 难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
: 我关注的主要是代码的robustness with respect to different future C
: compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
: 所以需求是有的。
: 之类的书里面有详细讲这些隐含在C的不同compiler实现的坑。
: 但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。

c****e
发帖数: 1453
7
I built small tool to translate a DSL to Verilog years ago. I uses http://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/index.html. If the BNF is simple, it's quite easy. You can do lots of things without full fledged parser.
d********t
发帖数: 9628
8
Perl无疑

【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码

g****t
发帖数: 31659
9
thanks for sharing
g****t
发帖数: 31659
10
thanks for information. 展开说说?
相关主题
g++编译了不该过的C++代码接触scala两年了
老码农冒死揭开行业黑幕:如何编写无法维护的代码(zz)[合集] 到底要学习Perl,还是Python?
FP内部比较: Haskell其实可以当脚本语言来用现在还在“学”脚本语言的,都弱爆了
进入Programming版参与讨论
d********t
发帖数: 9628
11
有啥好说的,Perl到目前为止还是最灵活,处理文本最方便的。

【在 g****t 的大作中提到】
: thanks for information. 展开说说?
v********t
发帖数: 196
12
Python应该可以

【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码

r*****9
发帖数: 65
13
perl啊,做txt/log分析难道不是default用它吗
G***l
发帖数: 355
14
lz你的标题误导人了。你在标题里说文本分析,结果一堆回复perl/python的,那些做
文本处理是很好。但你这个不是文本的问题,因为你这不是单纯的文本,是有语义的。
你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用compiler
把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都能准确定
位到,这时候你把ast上所有变量定义后面加一个初始化,再把ast反过来写成source
code,就成了。
如果你的需求很简单,比如只是变量定义加上初始化,那用纯文本regular expression
处理就可以了,perl,python很适合,哪怕sed/awk都可以搞定。如果复杂的话就需要
parser了,你可以用antlr,yacc之类的,那些常见语言的grammar都有现成的,不过要
是你自己特定的语法的话,就要自己写lexer/parer了,用上面提到的parser
generator的工具也挺容易。

【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码

g****t
发帖数: 31659
15
编译器或者编译器的middle ware是通用工具,对所有程序都有用,所以成本高。只要思
路清晰直接,做个类似的专门自己芯片用的tool应该不需要那么高成本。另外几十M的
赔偿其实在半导体行业算是少的。
g****t
发帖数: 31659
16
谢谢回复。我学习下你说的东西再来和大家汇报。
我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
以免导致软件太复杂。我打算先实现以下四条rule:
第一条是查没明确初始化的变量。给它们明确初始化
第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
第三条是把所有的for循环展开。copy paste多遍。
第四条是把while 表达式定义的
不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
的范围,然后加上条件。明确避免while循环次数超过这个bound.
这几条会把原来的c code变成新的略微降低的c code
.

。你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用
compiler把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都
能准确定
c********6
发帖数: 382
17
3和4要做value range analysis,前端也不好做,除非你知道代码循环的写法一定就那
么几种。做源源变换不损失原来code的信息还是比较难做到的。
C**********t
发帖数: 34
18
你的第四条是halting problem,判断一个程序是否为死循环。这个方法应该是
undecidable的吧。循环最大最小次数在绝大多数情况下也是没法用数学证明得出

【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code

p***o
发帖数: 1252
19
四的水很深,最简单的比如单链表顺序访问,你怎么做?

【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code

g****t
发帖数: 31659
20
我有预知的domain knowledge.不是General 问题。
相关主题
clojure 做数据分析jvm上3大脚本语言
vert.x就是脚本语言们的企业版Perl程序员工作机会多吗?
王垠的这篇写的不错有人用bash吗?
进入Programming版参与讨论
y**********u
发帖数: 6366
21
python 的ast应该可以,上次看了一下,好像是基于antlr的
那C/C++/java也应该可以直接上antlr了

里定

【在 v********t 的大作中提到】
: Python应该可以
g****t
发帖数: 31659
22
我多是一些数学物理类型的方程。while条件都是ADC读出来的几个传感器的电压触发一
些逻辑。传感器电压读数是有固定范围的,电压对时间的变化率也是有固定范围的。这
个系统的输入等于是可列举的。所以输出也是可列举的。所以我觉得原理上来说,所有
可能的情况是可穷尽的列出的。
简单的说,电压信号是bound在两个sin函数之间的离散信号。我觉得原理上来说,每个
for ,while都可估计出循环次数范围。到底能不能,只能一个个看了才知道。但我确切
的肯定,很多都能。
一般的c code,拆解while是没可能的。
l*******g
发帖数: 27064
23
处理文本,perl语言是不是最方便
1 (共1页)
进入Programming版参与讨论
相关主题
Perl程序员工作机会多吗?Initialization list的一个问题
有人用bash吗?g++编译了不该过的C++代码
有人搞編譯器麽?老码农冒死揭开行业黑幕:如何编写无法维护的代码(zz)
int &x=y;的问题FP内部比较: Haskell其实可以当脚本语言来用
脚本语言 vs 编译语言接触scala两年了
转贴:[圣战] python 是个讨厌的语言[合集] 到底要学习Perl,还是Python?
现在学LLVM有没有前途现在还在“学”脚本语言的,都弱爆了
hci, Clojure有类似windows COM那种东西吗?clojure 做数据分析
相关话题的讨论汇总
话题: 代码话题: 初始化话题: 定义话题: 芯片话题: 文本