使用ANTLR解析.torrent文件

时间:2015-10-24 05:55:28

标签: regex parsing antlr torrent

我尝试使用ANTLR4从.torent文件解析metainfo。

元信息文件中的所有数据均为bencoded。 bencoding的规范:

dictionary = "d" 1*(string anytype) "e" ; non-empty dictionary
list       = "l" 1*anytype "e"          ; non-empty list
integer    = "i" signumber "e"
string     = number ":" <number long sequence of any CHAR>
anytype    = dictionary / list / integer / string
signumber  = "-" number / number
number     = 1*DIGIT
CHAR       = %x00-FF                    ; any 8-bit character
DIGIT      = "0" / "1" / "2" / "3" / "4" /
            "5" / "6" / "7" / "8" / "9"

我使用以下语法:

grammar Bencode;

bencode: (binteger | bstring | blist | bdictionary) EOF;

binteger: 'i' INT 'e';

bstring: INT ':' STRING;

blist: 'l' (binteger | bstring | blist | bdictionary)+ 'e';

bdictionary: 'd' (bstring (binteger | bstring | blist | bdictionary))+ 'e';

INT : DIGIT+ ;

fragment DIGIT : [0-9] ;

STRING : ('a'..'z')* ;

但面临下一个问题。 我有以下例子:

d3:one3:twoe

解析器无法将第二个字符串识别为two,但识别为twoe。因此,解析器无法识别字典的结尾,该字典以e结束。

同样,另一个示例d3:onel4:testee无法识别,因为第一个字符串是onel,而不是one

如何修复我的语法,无论它对于这种情况是否正确?

P.S。别介意字符串a %x00-FF,这个语法是草稿,包含其他一些小错误。

0 个答案:

没有答案