package Ġorg . lex em . ang mar . analyzer . nodes . functional . expressions . binary Ċ Ċ import Ġorg . lex em . ang mar .* Ċ import Ġorg . lex em . ang mar . analyzer .* Ċ import Ġorg . lex em . ang mar . analyzer . data . primitives .* Ċ import Ġorg . lex em . ang mar . analyzer . nodes .* Ċ import Ġorg . lex em . ang mar . analyzer . nodes . functional . expressions . binary . Binary Analyzer Common s . create Arguments Ċ import Ġorg . lex em . ang mar . errors .* Ċ import Ġorg . lex em . ang mar . parser . functional . expressions . binary .* ĊĊ Ċ /** Ċ Ġ* ĠAnalyzer Ġfor Ġadd itive Ġexpressions . Ċ Ġ*/ Ċ internal Ġobject ĠAdd itive Expression Analyzer Ġ{ ĊĠĠĠ Ġconst Ġval Ġsignal End First Expression Ġ= ĠAnalyzer Nodes Common s . signal Start Ġ+ Ġ 1 ĊĊĠĠĠ Ġ// ĠMETHO DS Ġ---------------------------------------------------------------- ĊĊĠĠĠ Ġfun Ġstate Machine ( analyzer : ĠLex em Analyzer , Ġsignal : ĠInt , Ġnode : ĠAdd itive Expression Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( signal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnalyzer Nodes Common s . signal Start Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanalyzer . next Node ( node . expressions [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġsignal End First Expression Ġuntil Ġsignal End First Expression Ġ+ Ġnode . expressions . size Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġ( signal Ġ- Ġsignal End First Expression ) Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEven Ġvalues Ġmust Ġcompute Ġthe Ġaddition . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoperate ( analyzer , Ġposition , Ġsignal , Ġnode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEvaluate Ġthe Ġnext Ġoperand . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠLast Ġto ĠLeft Ġin Ġthe Ġstack . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer . memory . rename Last Stack Cell ( Analyzer Common s . Identifiers . Left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanalyzer . next Node ( node . expressions [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġanalyzer . next Node ( node . parent , Ġnode . parent Signal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOper ates Ġtwo Ġvalues Ġdepending Ġon Ġthe Ġspecified Ġoperator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġoperate ( analyzer : ĠLex em Analyzer , Ġsignal : ĠInt , Ġposition : ĠInt , Ġnode : ĠAdd itive Expression Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġnode . operators [ position Ġ/ Ġ 2 Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġoperand Ġvalues . ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= ĠAnalyzer Nodes Common s . resolve Setter ( analyzer . memory , Ġanalyzer . memory . getLast From Stack ()) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= ĠAnalyzer Nodes Common s . resolve Setter ( analyzer . memory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer . memory . get From Stack ( Analyzer Common s . Identifiers . Left )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġoperand Ġfunction . ĊĠĠĠĠĠĠĠ Ġval Ġoperator FunctionName Ġ= Ġwhen Ġ( operator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd itive Expression Node . addition Operator Ġ-> ĠAnalyzer Common s . Operators . Add ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd itive Expression Node . sub traction Operator Ġ-> ĠAnalyzer Common s . Operators . Sub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠAng mar Un reachable Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Function Ref Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Analyzer Common s . get Operator Function ( analyzer , Ġleft , Ġnode , Ġnode . expressions [ position Ġ- Ġ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator , Ġoperator FunctionName ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġargument Ġvalues . ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġcreate Arguments ( analyzer , Ġleft , Ġright ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġoperands Ġfrom Ġthe Ġstack . ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . remove From Stack ( Analyzer Common s . Identifiers . Left ) ĊĠĠĠĠĠĠĠ Ġanalyzer . memory . remove Last From Stack () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAnalyzer Nodes Common s . call Function ( analyzer , Ġoperator Function Ref , Ġarguments , Ġnode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL xm Code Point ( node , Ġsignal Ġ+ Ġ 1 )) ĊĠĠĠ Ġ} Ċ } Ċ