自作言語作るためにJavaCCで構文解析やってます。
負の数と引き算の識別方法がわからずに困ってます。
どのように定義するのがよいのでしょうか?

以下現状の一部抜粋
void enzan3() :
{}
{
enzan4()((<TASU>|<HIKU>)right=enzan4())*
}

void enzan4() :
{}
{
enzan5()((<KAKERU>|<WARU>)enzan5())*
}

SikiNode enzan5() :
{}
{
<MOZI>|[<HIKU>]<SUUZI>|"(" e=enzan3() ")"
}