有这没个公式
 A and B or (C and D) 用javacc 定义 并解析PARSER_END(cmmJavaCC)
SKIP:{
  " "
  | "\t"
  | "\n"
  | "\r"
  | <"//"(~["\n", "\r"])*("\n"
  | "\r"
  | "\r\n")>
  | <"/*"(~["*"])*"*"(~["/"](~["*"])*"*")*"/">
}
TOKEN:/*定义关键字*/
{
  <IF:"if">
  | <ELSE:"else">
  | <READ:"read">
  | <WRITE:"write">
  | <WHILE:"while">
  | <INT:"int">
  | <REAL:"real">
}
TOKEN:/* 定义整数 */
{
  <INTEGER_LITERAL:["1"-"9"](<DIGIT>)*>
}
TOKEN:/* 定义实数 */
{
  <REAL_LITERAL:(<DIGIT>)+
  | (<DIGIT>)+"."
  | (<DIGIT>)+"."(<DIGIT>)+
  | "."(<DIGIT>)+>
}
TOKEN:/*定义数字*/
{
  <#DIGIT:["0"-"9"]>
}
TOKEN:/*定义符号*/
{
  <UNDERSCORE:"_">
  | <COMMA:",">
  | <SEMICOLON:";">
  | <COLON:":">
  | <LEFTPARENTHESES:"(">
  | <RIGHTPARENTHESES:")">
  | <EQUAL:"=">
  | <PLUS:"+">
  | <MINUS:"-">
  | <TIMES:"*">
  | <DIVIDE:"/">
}
TOKEN:/* 定义标识符 */
{
  <IDENTIFIER:<LETTER>
  | <LETTER>(<LETTER>
  | <DIGIT>
  | <UNDERSCORE>)*(<LETTER>
  | <DIGIT>)+>
  | <#LETTER:["a"-"z", "A"-"Z"]>
}int Start():{}{
  Procedure()"!"{
    return 0;
  }
  | "!"{
    return 1;
  }请问 我怎样才能解析出括号 是不是匹配正确写了递归没成功void MatchedBraces() :
{}
{
  "(" [ MatchedBraces() ] ")"
}