什么是根据您的Antlr语法区分不同输入类型的最简单方法?

时间:2015-04-08 07:59:22

标签: antlr4 visitor

在我的语法中,我有如下规则:

set_stmt
:SET  ID (DOT ID)?  TO  setExpr NEWLINE+
;

setExpr
: arithExpr
| ID (DOT ID)?
| STRINGLITERAL
; 

对于不同的输入类型,如下所示,

set id to id
set id to ""
set id to id.id
set id to arithExpr

set id.id to id
set id.id to ""
set id.id to id.id
set id.id to arithExpr

我必须在访问者类中实现不同的逻辑。对我来说最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

首先分解你的语法:

set_stmt
:SET  ID TO  setExpr NEWLINE+ #setvar
|SET  ID DOT ID  TO  setExpr NEWLINE+ #setatt
;

setExpr
: arithExpr # number
| STRINGLITERAL # string
| ID # getvar
| ID DOT ID #getatt
;

这将生成一个访问者,其中包含每个标记替代方法的访问方法。这使您可以在每个访问者方法中编写不同的代码。