本系列之前的文章:
这一步, 实现了最简单的单条件, 只有"条件为真"时执行单语句. 例如:
变量=1 如果 变量<2 变量=变量×2变量
返回2
实现
语法规则修改, 将原本的'声明'拆分出多个规则:
声明 : 赋值声明 | 如果声明 | 求值声明 | T新行 ; 如果声明 : '如果' 表达式 声明 ; 赋值声明 : T变量名 '=' 表达式 T新行 ; 求值声明 : 表达式 T新行 ;
"定制访问器"中, 赋值/求值声明只需修改类型, 添加的"如果声明"部分(需改名为"条件声明"之类):
@Override public 节点 visit如果声明(如果声明Context 上下文) { 条件节点 节点 = new 条件节点(); 节点.条件 = visit(上下文.表达式()); 节点.条件.原始文本 = 上下文.表达式().getText(); 节点.条件为真分支 = visit(上下文.声明()); return 节点; }
语法树节点新增类型:
public class 条件节点 extends 节点 { public 节点 条件; public 节点 条件为真分支; }
"运行器"的"求值"方法中添加条件节点的处理:
else if (节点 instanceof 条件节点) { Object 条件 = 求值(((条件节点) 节点).条件); if (条件 instanceof Boolean) { return (boolean)条件 ? 求值(((条件节点) 节点).条件为真分支) : null; } else { System.err.println("[运行时错误] 条件部分需为布尔值: " + ((条件节点) 节点).条件.原始文本); return null; } }
下面, 需要添加条件语句中对换行以及条件执行多个语句的支持, 需要选择是用{}还是其他特殊规则决定条件语句范围.
作者:吴烜
原文链接:https://www.cnblogs.com/program-in-chinese/p/10489414.html
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦