针对ANTLR4的Delphi语法问题

时间:2017-03-06 08:15:49

标签: delphi grammar antlr4 delphi-xe

我找到了一个用于Delphi的ANTLR3 Delphi Grammar,我尝试转换为ANTLR4。但我有一个我不明白的奇怪问题。我创建了一个包含ANTRL4 Delphi Grammar

的仓库

大多数人的想法似乎都有效,但如果我有一个简单的单位,可以使用以下内容:

unit TestParser;

interface

procedure Dim(var dd: string; const Dim1: Integer; const Dim2: Integer); overload;

implementation

procedure Dim(var dd: string; const Dim1: Integer; const Dim2: Integer); overload;
begin
  //do something
end;

end.

当找到第一个过程关键字时,在interfaceDecl中调用procDecl。但是一旦var和/或const i到达它就会破坏procDecl并启动varSection / constSection而不是完成procDecl

我必须承认,我对ANTLR来说相当新,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

整个问题取决于变量名dd

似乎由于某种原因,解析器将其误认为是十六进制数字。将名称更改为123之类的字词时,会得到相同的效果。

只要更改名称,以免将其误认为数字(例如,只需添加g-z范围内的字符),一切都很好。但是为什么会发生这种情况,我无法解释。

顺便说一句:感谢Delphi.g4。