编译原理 - 设计类Python编译器时,如何处理tab和空格的缩进问题?
ringa_lee
ringa_lee 2017-04-17 14:33:03
[Python讨论组]
func fab(number):

    if(number == 1):
        return 1

    if(number == 2):
        return 2

    return fab(number-1) + fab(number-2)

所设计语言原型如上图。

执行以下C++代码

string text = readline(2)
for(i = 0;i < text.length();i++){
    cout<<i<<" ["<<text.at(i)<<"]"<<endl;
}

得到该结果,tab应该如何识别?

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHPz

1) 应该说是python解释器更严谨些
2) tab和空格对应的是不同的16进制,所以你应该根据16进制来判断是空格还是tab. 见这里
http://baike.baidu.com/link?url=m0NR0QSmKipvW5XkG8EW_0RaReLXgK4smzBDkQyTK0yc0MyrxvG9_eTyIrOADEcjaVc28E32wPMrgPF5c1DmCK

巴扎黑

lex的时候应该可以把行首空白作为一种特殊的token,然后保留每一层的行首空白数量,变大=>block开始,变小=>搜索之前的空白数量,生成对应数量的block结束

只是大概思路,具体实现可以去看看coffeescript的实现

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号