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