我找到了一个用于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来说相当新,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
整个问题取决于变量名dd
。
似乎由于某种原因,解析器将其误认为是十六进制数字。将名称更改为123
之类的字词时,会得到相同的效果。
只要更改名称,以免将其误认为数字(例如,只需添加g-z范围内的字符),一切都很好。但是为什么会发生这种情况,我无法解释。
顺便说一句:感谢Delphi.g4。