登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
开发工具
>
编译/构建/部署
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
26
Star
51
Fork
15
方舟编译器孵化器
/
MapleFE
代码
Issues
3
Pull Requests
0
Wiki
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
新语言支持建议
待办的
#I1DIDR
majiang31312
创建于
2020-04-02 22:34
非常高兴华为能把代码开放出来学习。 这段时间学习了一下MapleFE,尝试了一下在其上构建Kaleidoscope语言的AST(llvm教程中的一个玩具语言,https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html)。 折腾了几天,发现了一些问题。 1 构建系统没有做好对多语言的支持。顶层Makefile,autogen/Makefile都出现了对java的硬编码,没有使用LANG这个变量。AutoGen::Init 函数的路径名中出现了java硬编码。 2 部分构建代码没有考虑多语言的场景,运行时会有段错误。比较典型的有shared/src/ruletable_util.cpp 中的FindSeparator/FindOperator函数,循环中用SEP_NA等定死的宏做终止判断条件,如果新语言的定义和java不同,会出现未定义的行为。类似的问题,shared/src/parser.cpp中Parser::SetupTopTables没有考虑新语言没有TblClassDeclaration/TblInterfaceDeclaration的情况。 3 部分实现和文档不对应。AddFunctionBody这个Action没有对应的实现,只有AddFunctionBodyTo。更加奇特的是binary expression的解析,BuildBinaryOperation这action不能直接调用(会assert)。一定要写成下面这样 rule UnaryExpression : ONEOF( '+' + Identifier, '-' + Identifier) attr.action.%1,%2 : BuildUnaryOperation(%1, %2) rule BinaryExpression : ONEOF( Identifier + UnaryExpression, Identifier + UnaryExpression) 走ASTTree::NewTreeNode中的特殊流程,把Identifier + UnaryExpression再合并回binary expression。这个逻辑文档只字未提实在是太坑了。。。 4 添加--trace-table等选项后,java2mpl会死循环,无法结束。 综上,总体感觉FE核心的抽象做得不错,比较容易看懂,比flex+bison要更简单清晰,但成熟度确实还差一些。 个人有些小的建议: A) 把文档做好,文档尽量以中文编写(如果这套体系能起来,我相信一定是依靠以中文为母语的华人。中文文档能大幅提升沟通效率)。良好的文档对培养社区用户是至关重要的。 B) 实现一个类似Kaleidoscope的简单语言,作为教程放到代码里面。这个不仅能帮助理清整个框架对多语言支持的需求,还能大幅减少新手用户学习的成本。 C) 到mapleIR的生成部分对用户很有吸引力,如果可能应尽早开源。目前只是解析AST,实用性比较弱。用户要想自己写IR的生成流程也缺乏参考。
非常高兴华为能把代码开放出来学习。 这段时间学习了一下MapleFE,尝试了一下在其上构建Kaleidoscope语言的AST(llvm教程中的一个玩具语言,https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html)。 折腾了几天,发现了一些问题。 1 构建系统没有做好对多语言的支持。顶层Makefile,autogen/Makefile都出现了对java的硬编码,没有使用LANG这个变量。AutoGen::Init 函数的路径名中出现了java硬编码。 2 部分构建代码没有考虑多语言的场景,运行时会有段错误。比较典型的有shared/src/ruletable_util.cpp 中的FindSeparator/FindOperator函数,循环中用SEP_NA等定死的宏做终止判断条件,如果新语言的定义和java不同,会出现未定义的行为。类似的问题,shared/src/parser.cpp中Parser::SetupTopTables没有考虑新语言没有TblClassDeclaration/TblInterfaceDeclaration的情况。 3 部分实现和文档不对应。AddFunctionBody这个Action没有对应的实现,只有AddFunctionBodyTo。更加奇特的是binary expression的解析,BuildBinaryOperation这action不能直接调用(会assert)。一定要写成下面这样 rule UnaryExpression : ONEOF( '+' + Identifier, '-' + Identifier) attr.action.%1,%2 : BuildUnaryOperation(%1, %2) rule BinaryExpression : ONEOF( Identifier + UnaryExpression, Identifier + UnaryExpression) 走ASTTree::NewTreeNode中的特殊流程,把Identifier + UnaryExpression再合并回binary expression。这个逻辑文档只字未提实在是太坑了。。。 4 添加--trace-table等选项后,java2mpl会死循环,无法结束。 综上,总体感觉FE核心的抽象做得不错,比较容易看懂,比flex+bison要更简单清晰,但成熟度确实还差一些。 个人有些小的建议: A) 把文档做好,文档尽量以中文编写(如果这套体系能起来,我相信一定是依靠以中文为母语的华人。中文文档能大幅提升沟通效率)。良好的文档对培养社区用户是至关重要的。 B) 实现一个类似Kaleidoscope的简单语言,作为教程放到代码里面。这个不仅能帮助理清整个框架对多语言支持的需求,还能大幅减少新手用户学习的成本。 C) 到mapleIR的生成部分对用户很有吸引力,如果可能应尽早开源。目前只是解析AST,实用性比较弱。用户要想自己写IR的生成流程也缺乏参考。
评论 (
10
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
未关联
master
java2ast_ast2mpl
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
C++
1
https://gitee.com/openarkcompiler-incubator/MapleFE.git
git@gitee.com:openarkcompiler-incubator/MapleFE.git
openarkcompiler-incubator
MapleFE
MapleFE
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册