[英]JavaCC grammar conflict
我有一個大致這樣定義的語法。
TOKEN:{
<T_INT: "int"> |
<T_STRING: ["a"-"z"](["a"-"z"])*>
}
SKIP: { " " | "\t" | "\n" | "\r" }
/** Main production. */
SimpleNode Start() : {}
{
(LOOKAHEAD(Declaration()) Declaration() | Function())
{ return jjtThis; }
}
void Declaration() #Decl: {}
{
<T_INT> <T_STRING> ";"
}
void Function() #Func: {}
{
<T_STRING> "();"
}
這適用於以下內容:
int a;
foo();
但是當我嘗試int();
,對我來說是合法的,應該由Function()進行解析,它改為用於聲明。 如何解決此“沖突”? 我嘗試了各種組合。
關於此的JavaCC FAQ一節的標題為“ 如何處理未保留的關鍵字 ?”。
我要做的是允許關鍵字替代標識符,即
(<T_STRING> | <T_INT>) "();"
當關鍵字很多時,創建一個允許所有關鍵字都與常規標識符標記一起使用的Identifier
產生可能是有益的。
順便說一句,您可能需要"(" ")" ";"
而不是"();"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.