2

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

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

我试图创建一个令牌 t 来吸收所有令牌,但它不起作用。

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

3 回答 3

1

我设法使用以下代码获取字符串:

String path() :
{String path = "";
Token slash = null;
Token id = null;}
{
  (slash = < SLASH > ( id = < IDENTIFIER >)
  {
    path += slash.toString() + id.toString();
  })+
  {
    return path;
  }  
}
于 2013-04-26T20:19:08.563 回答
1

您可以只捕获第一个和最后一个标记,然后通过遍历生成的链表来创建字符串。请参阅位于http://www.engr.mun.ca/~theo/JavaCC-FAQ的 FAQ 中的 Q5.2

于 2013-04-27T18:11:44.773 回答
0

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

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

然后你就可以用这样的方法来使用它:

String path():
{ Token t; }
{
    t = <PATH>
    {
        return t.image;
    }
}
于 2017-10-15T03:30:22.007 回答