如何用Yacc实现一个Python的编译器

 我来答
匿名用户
2017-04-28
展开全部
理论上是可以的,关键点在于您要在Lexer和Parser之间要多加一层,用于分析哪些地方是进入缩进,哪些地方是退出缩进。然后匹配到缩进的时候插入INDENT和DEDENT这样的Token。至于分析的方法,您可以先建一个Stack来存放每一层缩进块的Token,然后根据Lexer送来的Token中的行号、列号等信息来和Stack栈顶的数据进行对比,判断下来是该进入缩进的就push一个INDENT,并这个INDENT插入到输出的Token流中。发现是Stack中旧的Token匹配的,就把之前的缩进块pop出来,并在输出的Token流中插入DEDENT。然后在Paser层面处理语句块的时候可以这样处理(我只写大概意思的伪码,具体您自己看着办)block ::= INDENT NLS statements NLS DEDENTif ::= IF LPAREN expression RPAREN COLON block
肃嘲自是旧时观5
2017-04-28 · TA获得超过270个赞
知道小有建树答主
回答量:377
采纳率:68%
帮助的人:51.5万
展开全部
boost里面好像有python模块,但是是C++的,C++的类,最后好像编译成dll了,然后import,不知道是不是你要的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式