如何向ANTLR语法添加内建函数?

问题描述 投票:0回答:1

我们正在努力将Antlr VB6 grammar扩展到涵盖LotusScript。

LotusScript具有一些与VB无关的功能。我试图让我的语法理解像这样的东西:

x = Inputbox("How Happy are you")
y = Inputbox("Number", "Enter any number", "0")

我尝试添加语法:

inputboxStmt
   : INPUTBOX WS? argList
   ; 

INPUTBOX
   : I N P U T B O X
   ;

vb6 Grammar中的现有定义:

argList
   : LPAREN (WS? arg (WS? COMMA WS? arg)*)? WS? RPAREN
   ;

arg
   : (OPTIONAL WS)? ((BYVAL | BYREF) WS)? (PARAMARRAY WS)? ambiguousIdentifier typeHint? (WS? LPAREN WS? RPAREN)? (WS asTypeClause)? (WS? argDefaultValue)?
   ;

WS
   : [ \t\u000C] +
   ;

但是,当我解析上面的代码时,出现类似以下错误:

line 5:14 no viable alternative at input '\nDim nstr As String\n x = Inputbox("How Happy are you"'
line 5:14 no viable alternative at input '\n x = Inputbox("How Happy are you"'
line 5:14 mismatched input '"How Happy are you"' expecting { [long list of keywords]}
line 6:16 mismatched input '"Number"' expecting {[same long list of keywords] }
line 6:26 mismatched input '"Enter any number"' expecting <EOF>

我在这里想念什么?

antlr antlr4 lotusscript
1个回答
0
投票

您收到的错误主要是由于不允许使用字符串作为参数。 arg规则的主要部分是ambiguousIdentifier,其定义为:

ambiguousIdentifier
   : (IDENTIFIER | ambiguousKeyword) +
   | L_SQUARE_BRACKET (IDENTIFIER | ambiguousKeyword) + R_SQUARE_BRACKET
   ;

您会看到只有标识符,某些关键字(也称为非保留关键字)以及允许的内容周围的可选方括号。这就是Visual Basic reference实际上允许使用的参数名称。为了使您的用例可行,也将所有*LITERAL令牌也添加到此规则中。

这里还引起关注的是加号运算符。为什么要允许多个标识符为一个?基本语言真的允许吗?

© www.soinside.com 2019 - 2024. All rights reserved.