亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java LPAREN怎么用

發布時間:2022-01-17 16:15:32 來源:億速云 閱讀:213 作者:iii 欄目:編程語言

這篇文章主要介紹“Java LPAREN怎么用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java LPAREN怎么用”文章能幫助大家解決問題。

為了讓詞法分析做得更簡單,我們通常都不會在文法分析的時候,使用“(”,“)”等字符號串來表示終結符號,而需要轉而使用LPAREN, RPAREN這樣的整型符號來表示。

PARSER_BEGIN(Grammar)
public class Grammar implements NodeType {
   public ParseTreeNode GetParseTree(InputStream in) throws ParseException
   {
       Grammar parser =new Grammar(in);
       return parser。Expression();
   }
}
PARSER_END(Grammar)
SKIP :
{
   " " | " " | " " | ""
}
TOKEN :
{
   < ID: ["a"-"z","A"-"Z","_"> ( ["a"-"z","A"-"Z","_","0"-"9"> )* >
 | < NUM: ( ["0"-"9"> )+ >
 | < PLUS:   "+" >
 | < MINUS:  "-" >
 | < TIMERS: "*" >
 | < OVER:   "/" >
 | < LPAREN: "(" >
 | < RPAREN: ")" >
}

ParseTreeNode Expression() :
{
   ParseTreeNode ParseTree = null;
   ParseTreeNode node;
}
{
   ( node=Simple_Expression()
       {
           if(ParseTree == null)
               ParseTree =node;
           else
           {
               ParseTreeNode t;
               t= ParseTree;
               while(t.next != null)
                   t=t.next;
               t.next = node;
           }
       }
   )*
   { return ParseTree; }
   


}
ParseTreeNode Simple_Expression() :
{
   ParseTreeNode node;
   ParseTreeNode t;
   int op;
}
{
   node=Term(){}
   (
       op=addop() t=Term()
       {
           ParseTreeNode newNode = new ParseTreeNode();
           newNode.nodetype = op;
           newNode.child[0] = node;
           newNode.child[1] = t;
           switch(op)
           {
               case PlusOP:
                   newNode.name = "Operator: +";
                   break;
               case MinusOP:
                   newNode.name = "Operator: -";
                   break;
           }
           node = newNode;
       }
   )*
   { return node; }
}
int addop() : {}
{
   { return PlusOP; }
 |{ return MinusOP; }
}
ParseTreeNode Term() :
{
   ParseTreeNode node;
   ParseTreeNode t;
   int op;
}
{
   node=Factor(){}
   (
       op=mulop() t=Factor()
       {
           ParseTreeNode newNode = new ParseTreeNode();
           newNode.nodetype = op;
           newNode.child[0] = node;
           newNode.child[1] = t;
           switch(op)
           {
               case TimersOP:
                   newNode.name = "Operator: *";
                   break;
                   case OverOP:
                   newNode.name = "Operator: /";
                   break;
           }
           node = newNode;
       }
   )*
   {
       return node;
   }
}
int mulop() :{}
{
   { return TimersOP; }
 |{ return OverOP;   }
}
ParseTreeNode Factor() :
{
   ParseTreeNode node;
   Token t;
}
{
   t=
   {
       node=new ParseTreeNode();
       node.nodetype= IDstmt;
       node.name = t.image;
       return node;
   }
   |
   t=
   {
       node=new ParseTreeNode();
       node.nodetype= NUMstmt;
       node.name = t.image;
       node.value= Integer.parseInt(t.image);
       return node;
   }
   |
   node=Simple_Expression()
   {
       return node;
   }
}

   其中SKIP中的定義就是在進行詞法分析的同時,忽略掉的記號。TOKEN中的,就是需要在做詞法分析的時候,識別的詞法記號。當然,這一切都是以正則表達式來表示的。
   這個例子就有多個非終結符號,可以看出,我們需要為每個非終結符號寫出一個過程。不同的非終結符號的識別過程中可以互相調用。

   以Simple_Expression()過程為例,它的產生式是Expression -> Term { addop Term },而在javacc的輸入文件格式是,它的識別是這樣寫的node=Term(){} ( op=addop() t=Term(){ … })* 前面說過,這里的”*”符號和正則表達式是一樣的,就是0次到無限次的重復。那么Simple_Expression等于文法Term Addop Term Addop Term Addop Term … 而Addop也就相當于PLUS和MINUS兩個運算符號。這里我們在寫Expression的文法的時候,同時還使用了賦值表達式,因為這個和Yacc 不同的時候,Javacc把文法識別完全地做到了函數過程中,那么如果我們要識別Simple_Expression的文法,就相當于按順序識別Term 和Addop兩個文法,而識別那個文法,就相當于調用那兩個非終結符的識別函數。正是這一點,我覺得Javacc的文法識別處理上就很接近程序的操作過 程,我們不需要像YACC那樣使用嚴格的文法表示格式,復雜的系統參數了。

關于“Java LPAREN怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤庆县| 金华市| 满洲里市| 沾化县| 忻城县| 邵东县| 溧水县| 万荣县| 平安县| 湘乡市| 虹口区| 柞水县| 甘洛县| 长海县| 米易县| 泊头市| 阆中市| 澜沧| 左权县| 龙里县| SHOW| 任丘市| 交城县| 湘潭市| 苍梧县| 惠州市| 郑州市| 团风县| 永修县| 德兴市| 福鼎市| 新沂市| 鄯善县| 柘城县| 辽阳市| 铜川市| 田东县| 东港市| 雷波县| 克东县| 盐津县|