免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3925 | 回复: 8
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-24 14:04 |只看该作者 |倒序浏览
本帖最后由 xyfree 于 2012-01-21 03:49 编辑

论坛徽章:
0
2 [报告]
发表于 2010-06-24 14:51 |只看该作者
# !/bin/bash
不疼了

论坛徽章:
0
3 [报告]
发表于 2010-06-25 16:49 |只看该作者
本帖最后由 Solidus 于 2010-06-25 17:03 编辑

这问题是不是可以简化成 一个函数 返回值是语言类型,参数是字符串对吧?

如果是的话,理论上就比较容易,先说下纯理论上的实现,每个语言的语法都可以编成一个识别器,每次shift 一个token的时候,每个token在shift到某个识别器之前要探测一次其是否为该语法的关键字,会有0-N个识别器报错,则排除掉,剩下的继续shift下一个token,最后剩下的就是合法语言类型。
另一个问题是,例如你要识别java和C,但是整个输入仅仅含有int a = 8;会被Java和C的自动机同时识别,这时候你得确定一个优先级。这里的优先级是人为地,仅仅因为它们有公共子集。

但是具体实现上没搞过,按理说一个lookahead足够长的递归下降就可以了,ANTLR足以~~
凭直觉来想,应该有个预处理装置,在某一点上就可以确定其是什么语言,之后就没必要继续做了,


PS:又想了想,还有个问题,就是词法值在不同语言上定义也不太一样,这就麻烦了,例如某个语言inta=8;可以识别成int a = 8;但是在C中式inta = 8;这时候词法部分也得像语法那样穷举,每个有分歧点都分裂一次,一个是int a,一个是inta,这时候涉及到得问题就没那么容易了。也就是说,每个语言的词法也需要一个识别器,其失败,则语法识别器跟着失败,但是这里比较麻烦的是容错怎么办?

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
4 [报告]
发表于 2010-06-26 09:00 |只看该作者
总得有个开始界定符号吧

论坛徽章:
0
5 [报告]
发表于 2010-06-26 17:14 |只看该作者
这个应该类似动态规划的过程,动态计算一个语言的语法和词法规则的集合,
最后这个语言的语法和词法规则集合将会 “收敛”于一个具体的语言。

这里列出的是分析的思路,并不是具体的算法:

(1) 词法分析阶段,每种输入语言都有一个合法字符集。
如果能从输入字符流中,根据合法字符集,判断出输入的是哪种语言。
这当然就是最理想的了,可以马上简化为单语言输入。
但是通常情况下,只能得出所有可接受语言的一个子集L0(包括但不仅限于真子集)
能够马上判断出具体输入语言的是特例,即L0集合的元素个数是1

(1-1) 在开始扫描之前,根据各语言的 语法规则,(确实是语法规则而不是词法规则)
构建一个所有可接受语言的词法规则,分析出所有可能出现在各种语言的第一个的语法终结符。
就是说,把所有可接受语言的集合看作一个语言 。

实际上不必一开始就计算所有语言的所有词法规则,只须从各种语言的语法开始符号开始,
计算每个单独语言中所有可能的第一个词法符号的规则,作为总体语言的词法开始符号。
所以应该从语法规则开始计算

(1-2) 随着越来越多的Token被归纳出来,即扫描的字符越多,待构建的L0中,语言的个数会逐渐减少。
这个过程中,如果要考虑完全容错性,则L0始终无法收敛。
应该考虑的是,可以进行下去继续分析的语言,和还有无法再继续分析的语言,比例是怎样。
如果全部无法继续分析,则应该考虑回退,进入排错状态。

(2) 如果在词法分析阶段,分析出输入语言属于可接受语言集合的一个子集L0。
这种情况通常是因为若干种语言的词法过于相似,而给出的代码片段不足以区分这些语言。
就要根据L0中的语言的语法规则,“总体语言”的词法规则。

暂时只想到这么多....{:2_172:}

论坛徽章:
0
6 [报告]
发表于 2010-06-28 12:45 |只看该作者
用个标志符在头上标识下

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2010-07-04 21:20 |只看该作者
总是需要检索到一个符号或者语法符合某个独特的语言才可以
如果一段语言完美的符合两种甚至多种语言,那么则需要一个优先了

论坛徽章:
0
8 [报告]
发表于 2010-07-05 14:39 |只看该作者
本帖最后由 starfuck 于 2019-11-26 23:30 编辑












论坛徽章:
0
9 [报告]
发表于 2010-07-05 14:44 |只看该作者
本帖最后由 starfuck 于 2019-11-26 23:30 编辑












您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP