2013-04-26 91 views
1

我在javacc中解析一个url(例如/ books/id/1)。我如何让这个方法返回整个url字符串?如何从javacc方法返回一个字符串?

void path() : 
{} 
{ 
    (<SLASH> (<IDENTIFIER>))+ 
} 

我试图创建一个令牌吨吸收所有的令牌,但它不工作。

void path() : 
{Token t = new Token();} 
{ 
    t = ((<SLASH> (<IDENTIFIER>))+) 
} 

回答

0

我设法使用下面的代码来获取字符串:

String path() : 
{String path = ""; 
Token slash = null; 
Token id = null;} 
{ 
    (slash = <SLASH> (id = <IDENTIFIER>) 
    { 
    path += slash.toString() + id.toString(); 
    })+ 
    { 
    return path; 
    } 
} 
1

你可以只捕获第一和最后一个记号,然后创建通过遍历导致链表的字符串。见Q5.2的常见问题解答:http://www.engr.mun.ca/~theo/JavaCC-FAQ

+0

我喜欢这样!感谢FAQ链接,它有很多有用的内容! – 2013-04-30 19:41:05

0

恕我直言最好的(也是最准确的方法)是定义一个令牌,然后使用它的方法:

TOKEN: 
{ 
    < PATH: (<SLASH> (<IDENTIFIER >))+ > 
} 

然后,你就可以消耗它在这样的方法:

String path(): 
{ Token t; } 
{ 
    t = <PATH> 
    { 
     return t.image; 
    } 
}