簡體   English   中英

JavaCC語法沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM