本系列以前的文章:java
Antlr4的分析錯誤處理bash
Antlr4實現數學四則運算markdown
這一步, 實現了最簡單的單條件, 只有"條件爲真"時執行單語句. 例如:code
變量=1
若是 變量<2 變量=變量×2
變量
複製代碼
返回2orm
語法規則修改, 將本來的'聲明'拆分出多個規則:get
聲明
: 賦值聲明
| 若是聲明
| 求值聲明
| 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; } } 複製代碼
下面, 須要添加條件語句中對換行以及條件執行多個語句的支持, 須要選擇是用{}仍是其餘特殊規則決定條件語句範圍.
2018-02-18