簡體   English   中英

制作計算器語法,使用javacc生成二叉樹

[英]Make a calculator's grammar that make a binary tree with javacc

我需要制作一個簡單的計算器(帶有infix運算符)解析器來處理+,-,*,/和float和variable運算符。 為此,我使用了javacc,並且使用jjtree進行了此語法編寫。 它可以工作,但不能確保最終的樹將是我需要的二叉樹。 我想要類似5 * 3 + xy的東西來生成以下樹:

  *
 / \
5   +
   / \
  3   -
     / \
    x   y

做到這一點的合適語法是什么,那將不會是左遞歸的?

類似於以下內容的東西會為您提供所需的樹。

void sum():
{}
{
    term()
    [    plus() sum()
    |    minus() sum()
    |    times() sum()
    |    divide() sum()
    |    modulo() sum()
    ]
}


void term() :
{}
{
    "(" sum() ")" | Number() | Variable()
}

- -編輯: - -

要獲得反映優先級和關聯性的樹,可以使用確定的節點。 請參閱JJTree文檔。

void sum() #void {} :
{
    term()
    (   plus() term() #BinOp(3)
    |   minus() term() #BinOp(3)
    )*
}

void term() #void {} :
{
    factor()
    (   times() factor() #BinOp(3)
    |   divide() factor() #BinOp(3)
    |   modulo() factor() #BinOp(3)
    )*
}

void factor() #void :
{}
{
    "(" sum() ")" | Number() | Variable()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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