如何用 ANTLR 4 实现自己的脚本语言
答案:1 悬赏:70 手机版
解决时间 2021-11-07 05:51
- 提问者网友:战魂
- 2021-11-07 02:59
如何用 ANTLR 4 实现自己的脚本语言
最佳答案
- 五星知识达人网友:西岸风
- 2021-11-07 04:06
在 ANTLR 里,我们写的规则,会生成解析器的代码,这个解析器,会把目标脚本,解析成一个抽象语法树。这颗抽象语法树上,越是靠近叶子节点的地方,结合优先级越高,越是靠近根的地方,结合优先级越低,根据这个特点,我们就可以让 ANTLR 帮我们完成以上的规则:
addExpression
: mulExpression (('+' | '-') mulExpression)*
;
mulExpression
: primaryExpression (('*' | '/') primaryExpression)*
;
primaryExpression
: Decimal
| '(' addExpression ')'
;
上面展示的 ANTLR 规则,在 primaryExpression
中,包括两个可选项,要么是数字,要么是括号表达式,是最高优先级,然后是 mulExpression,优先级最低的是 addExpression
。括号表达式内,是一个 addExpression ,所以,这是一个循环结构,可以处理无限长的四则运算式,比如
1+2*3-(4+5)/6+7+8,会被解析为如下的语法树:
addExpression : 1 + child1_1 - child1_2 + 7 + 8
child1_1 mulExpression : 2 * 3
child1_2 mulExpression : child1_2_1 / 6
child1_2_1 addExpression : 4 + 5
addExpression
: mulExpression (('+' | '-') mulExpression)*
;
mulExpression
: primaryExpression (('*' | '/') primaryExpression)*
;
primaryExpression
: Decimal
| '(' addExpression ')'
;
上面展示的 ANTLR 规则,在 primaryExpression
中,包括两个可选项,要么是数字,要么是括号表达式,是最高优先级,然后是 mulExpression,优先级最低的是 addExpression
。括号表达式内,是一个 addExpression ,所以,这是一个循环结构,可以处理无限长的四则运算式,比如
1+2*3-(4+5)/6+7+8,会被解析为如下的语法树:
addExpression : 1 + child1_1 - child1_2 + 7 + 8
child1_1 mulExpression : 2 * 3
child1_2 mulExpression : child1_2_1 / 6
child1_2_1 addExpression : 4 + 5
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯