3232import com .igormaznitsa .prologparser .tokenizer .Op ;
3333import com .igormaznitsa .prologparser .tokenizer .OpAssoc ;
3434import com .igormaznitsa .prologparser .tokenizer .TermWrapper ;
35-
3635import java .util .ArrayList ;
3736
3837final class AstItem {
@@ -168,19 +167,26 @@ private boolean isPrecedenceOk() {
168167 final Op wrappedOperator = (Op ) ((TermWrapper ) this .savedTerm ).getWrappedTerm ();
169168 switch (wrappedOperator .getAssoc ()) {
170169 case FX :
171- return this .leftItem == null && (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
170+ return this .leftItem == null &&
171+ (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
172172 case FY :
173- return this .leftItem == null && (this .rightItem != null && this .rightItem .getPrecedence () <= thisPrecedence );
173+ return this .leftItem == null &&
174+ (this .rightItem != null && this .rightItem .getPrecedence () <= thisPrecedence );
174175 case YF :
175- return (this .leftItem != null && this .leftItem .getPrecedence () <= thisPrecedence ) && this .rightItem == null ;
176+ return (this .leftItem != null && this .leftItem .getPrecedence () <= thisPrecedence ) &&
177+ this .rightItem == null ;
176178 case XF :
177- return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) && this .rightItem == null ;
179+ return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) &&
180+ this .rightItem == null ;
178181 case XFX :
179- return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) && (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
182+ return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) &&
183+ (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
180184 case XFY :
181- return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) && (this .rightItem != null && this .rightItem .getPrecedence () <= thisPrecedence );
185+ return (this .leftItem != null && this .leftItem .getPrecedence () < thisPrecedence ) &&
186+ (this .rightItem != null && this .rightItem .getPrecedence () <= thisPrecedence );
182187 case YFX :
183- return (this .leftItem != null && this .leftItem .getPrecedence () <= thisPrecedence ) && (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
188+ return (this .leftItem != null && this .leftItem .getPrecedence () <= thisPrecedence ) &&
189+ (this .rightItem != null && this .rightItem .getPrecedence () < thisPrecedence );
184190 default :
185191 throw new CriticalUnexpectedError ();
186192 }
@@ -217,66 +223,91 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
217223 final TermWrapper wrapper = (TermWrapper ) this .savedTerm ;
218224 if (this .leftItem == null && this .rightItem == null ) {
219225 // it is an atom because it has not any argument
220- return new PrologAtom (wrapper .getWrappedTerm ().getText (), wrapper .getQuotation (), wrapper .getPos (), wrapper .getLine ());
226+ return new PrologAtom (wrapper .getWrappedTerm ().getText (), wrapper .getQuotation (),
227+ wrapper .getPos (), wrapper .getLine ());
221228 }
222229
223230 if (this .leftItem == null ) {
224- if (this .rightItem .getType () == TermType .STRUCT && this .rightItem .savedTerm .isAnyBlock () && !((PrologStruct ) this .rightItem .savedTerm ).isEmpty ()) {
231+ if (this .rightItem .getType () == TermType .STRUCT &&
232+ this .rightItem .savedTerm .isAnyBlock () &&
233+ !((PrologStruct ) this .rightItem .savedTerm ).isEmpty ()) {
225234
226235 final PrologTerm rightTerm = this .rightItem .convertToTermAndRelease (parser );
227236 Op operator = (Op ) wrapper .getWrappedTerm ();
228237 final PrologTerm blockContent = ((PrologStruct ) rightTerm ).getTermAt (0 );
229238
230239 if (blockContent .getType () == TermType .STRUCT ) {
231- final PrologTerm [] terms = blockContent .flatComma (new ArrayList <>()).toArray (PrologParser .EMPTY_TERM_ARRAY );
240+ final PrologTerm [] terms =
241+ blockContent .flatComma (new ArrayList <>()).toArray (PrologParser .EMPTY_TERM_ARRAY );
232242
233243 if (operator .getArity () == terms .length ) {
234244 return new PrologStruct (operator , terms , wrapper .getLine (), wrapper .getPos ());
235245 } else {
236- final Op appropriateOperator = parser .getContext ().findOpForName (parser , operator .getText ()).findForArity (terms .length );
246+ final Op appropriateOperator =
247+ parser .getContext ().findOpForName (parser , operator .getText ())
248+ .findForArity (terms .length );
237249
238250 if (appropriateOperator == null ) {
239251 if (operator .getArity () == 1 ) {
240- return new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
252+ return new PrologStruct (operator , new PrologTerm [] {blockContent },
253+ wrapper .getLine (), wrapper .getPos ());
241254 } else {
242- return new PrologStruct (new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (), wrapper .getPos ()), terms , wrapper .getLine (), wrapper .getPos ());
255+ return new PrologStruct (
256+ new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (),
257+ wrapper .getPos ()), terms , wrapper .getLine (), wrapper .getPos ());
243258 }
244259 } else {
245- return new PrologStruct (appropriateOperator , terms , wrapper .getLine (), wrapper .getPos ());
260+ return new PrologStruct (appropriateOperator , terms , wrapper .getLine (),
261+ wrapper .getPos ());
246262 }
247263 }
248264
249265 } else {
250266 if (rightTerm .isCurlyBlock ()) {
251- return new PrologStruct (operator , new PrologTerm [] {rightTerm }, wrapper .getLine (), wrapper .getPos ());
267+ return new PrologStruct (operator , new PrologTerm [] {rightTerm }, wrapper .getLine (),
268+ wrapper .getPos ());
252269 } else {
253270 if (operator .getArity () == 1 ) {
254- return new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
271+ return new PrologStruct (operator , new PrologTerm [] {blockContent },
272+ wrapper .getLine (), wrapper .getPos ());
255273 } else {
256- operator = parser .getContext ().findOpForName (parser , operator .getText ()).findForArity (1 );
257- return operator == null ? new PrologStruct (new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (), wrapper .getPos ()), new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ())
258- : new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (), wrapper .getPos ());
274+ operator =
275+ parser .getContext ().findOpForName (parser , operator .getText ()).findForArity (1 );
276+ return operator == null ? new PrologStruct (
277+ new PrologAtom (wrapper .getText (), Quotation .SINGLE , wrapper .getLine (),
278+ wrapper .getPos ()), new PrologTerm [] {blockContent }, wrapper .getLine (),
279+ wrapper .getPos ())
280+ :
281+ new PrologStruct (operator , new PrologTerm [] {blockContent }, wrapper .getLine (),
282+ wrapper .getPos ());
259283 }
260284 }
261285 }
262286 }
263287 } else if (this .isAnyBlock () && this .leftItem .isAnyBlock ()) {
264- return new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm [] {this .leftItem .convertToTermAndRelease (parser )}, wrapper .getLine (), wrapper .getPos ());
288+ return new PrologStruct (wrapper .getWrappedTerm (),
289+ new PrologTerm [] {this .leftItem .convertToTermAndRelease (parser )}, wrapper .getLine (),
290+ wrapper .getPos ());
265291 }
266292
267293 if (!isOperandsOk ()) {
268- throw new PrologParserException ("No operands: [" + wrapper .getText () + ']' , wrapper .getLine (), wrapper .getPos ());
294+ throw new PrologParserException ("No operands: [" + wrapper .getText () + ']' ,
295+ wrapper .getLine (), wrapper .getPos ());
269296 }
270297
271298 final PrologTerm left ;
272299 final PrologTerm right ;
273300
274301 if (!isPrecedenceOk ()) {
275- if (this .rightItem != null && this .rightItem .isOperator () && this .rightItem .getOpAssoc ().isPrefix ()) {
302+ if (this .rightItem != null && this .rightItem .isOperator () &&
303+ this .rightItem .getOpAssoc ().isPrefix ()) {
276304 left = this .leftItem == null ? null : this .leftItem .convertToTermAndRelease (parser );
277- right = new PrologStruct (Op .VIRTUAL_OPERATOR_BLOCK , new PrologTerm [] {this .rightItem .convertToTermAndRelease (parser )});
305+ right = new PrologStruct (Op .VIRTUAL_OPERATOR_BLOCK ,
306+ new PrologTerm [] {this .rightItem .convertToTermAndRelease (parser )});
278307 } else {
279- throw new PrologParserException ("Operator precedence clash or missing operator: [" + wrapper .getText () + ']' , wrapper .getLine (), wrapper .getPos ());
308+ throw new PrologParserException (
309+ "Operator precedence clash or missing operator: [" + wrapper .getText () + ']' ,
310+ wrapper .getLine (), wrapper .getPos ());
280311 }
281312 } else {
282313 left = this .leftItem == null ? null : this .leftItem .convertToTermAndRelease (parser );
@@ -294,23 +325,30 @@ PrologTerm convertToTermAndRelease(final PrologParser parser) {
294325
295326 final PrologStruct operatorStruct ;
296327 if (left == null ) {
297- operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm [] {right }, wrapper .getLine (), wrapper .getPos ());
328+ operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), new PrologTerm [] {right },
329+ wrapper .getLine (), wrapper .getPos ());
298330 } else {
299- operatorStruct = new PrologStruct (wrapper .getWrappedTerm (), right == null ? new PrologTerm [] {left } : new PrologTerm [] {left , right }, wrapper .getLine (), wrapper .getPos ());
331+ operatorStruct = new PrologStruct (wrapper .getWrappedTerm (),
332+ right == null ? new PrologTerm [] {left } : new PrologTerm [] {left , right },
333+ wrapper .getLine (), wrapper .getPos ());
300334 }
301335 result = operatorStruct ;
302336 }
303337 break ;
304338 case STRUCT : {
305339 final PrologStruct thisStruct = (PrologStruct ) this .savedTerm ;
306- if ((thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK || thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )
340+ if ((thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK ||
341+ thisStruct .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )
307342 && thisStruct .getArity () == 1 ) {
308343
309344 final PrologTerm thatTerm = thisStruct .getTermAt (0 );
310345
311- if (thatTerm .getType () == TermType .STRUCT && (thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK || thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )) {
346+ if (thatTerm .getType () == TermType .STRUCT &&
347+ (thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_BLOCK ||
348+ thatTerm .getFunctor () == Op .VIRTUAL_OPERATOR_CURLY_BLOCK )) {
312349 // rolling normal blocks
313- result = thatTerm .isBlock () && this .isBlock () && (this .parentItem == null || this .parentItem .isBlock ()) ? thatTerm : thisStruct ;
350+ result = thatTerm .isBlock () && this .isBlock () &&
351+ (this .parentItem == null || this .parentItem .isBlock ()) ? thatTerm : thisStruct ;
314352 } else {
315353 result = thisStruct ;
316354 }
0 commit comments