java AST 表达式_java-如何使用ANTLR4创建AST?

好的,让我们建立一个简单的数学示例。 对于这样的任务,构建AST完全是矫kill过正,但这是展示原理的好方法。我将使用C#进行操作,但Java版本将非常相似。语法首先,让我们编写一个非常基本的数学语法来使用:grammar Math;compileUnit: expr EOF;expr: '(' expr ')' # parensExpr| ...
摘要由CSDN通过智能技术生成

好的,让我们建立一个简单的数学示例。 对于这样的任务,构建AST完全是矫kill过正,但这是展示原理的好方法。

我将使用C#进行操作,但Java版本将非常相似。

语法

首先,让我们编写一个非常基本的数学语法来使用:

grammar Math;

compileUnit

: expr EOF

;

expr

: '(' expr ')' # parensExpr

| op=('+'|'-') expr # unaryExpr

| left=expr op=('*'|'/') right=expr # infixExpr

| left=expr op=('+'|'-') right=expr # infixExpr

| func=ID '(' expr ')' # funcExpr

| value=NUM # numberExpr

;

OP_ADD: '+';

OP_SUB: '-';

OP_MUL: '*';

OP_DIV: '/';

NUM : [0-9]+ ('.' [0-9]+)? ([eE] [+-]? [0-9]+)?;

ID : [a-zA-Z]+;

WS : [ \t\r\n] -> channel(HIDDEN);

很基本的东西,我们有一个处理所有内容的dynamic规则(优先级规则等)。

AST节点

然后,让我们定义一些我们将使用的AST节点。 这些都是完全自定义的,您可以按照自己的方式定义它们。

这是我们用于此示例的节点:

internal abstract class ExpressionNode

{

}

internal abstract class InfixExpressionNode : ExpressionNode

{

public ExpressionNode Left { get; set; }

public ExpressionNode Right { get; set; }

}

internal class AdditionNode : InfixExpressionNode

{

}

internal class SubtractionNode : InfixExpressionNode

{

}

internal class MultiplicationNode : InfixExpressionNode

{

}

internal class DivisionNode : InfixExp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值