2022년 4월 3일 일요일

[기록용] Syntax 구문에서 and, or , &&, || 등의 항목을 분해하여 논리 식을 구성하기 위한 class

 앞서 구성되었던 CalucationSyntaxBaseDTO, CompareSyntaxBaseDTO 등의 class를 

사용하여 각 구분의 and or 의 항목을 연결하여 최종 참, 거짓으로 가져오기 위한 calss 


public class LogicSyntaxBaseDTO extends SyntaxBaseDTO {

private SyntaxBaseDTO leftDTO = null;

private SyntaxBaseDTO rightDTO = null;

private int markType = -1;

public LogicSyntaxBaseDTO(String syntax) {

super(syntax);

initResource();

}

private void initResource() {

parseCurrentSyntaxValue();

}



@Override

public boolean parseCurrentSyntaxValue() {

// TODO Auto-generated method stub

this.setMainType(MAIN_TYPE.LOGIC_TYPE);

if (CommonBaseUtility.isEmptyValue(syntax)) {

return false;

}

if ( isConstValue() ) {

return true;

}

specialKeySet = CommonParserUtility.parseSpecialKeyValues(syntax);

variableMap = CommonParserUtility.parseVariableValues(syntax);

if ( CommonParserUtility.hasLogicalValue(syntax) ) {

List<Map<String,String>> logicMapList = CommonParserUtility.parseStringLogicalBlocks(syntax);

String rightStr = logicMapList.get(0).get("RIGHT");

String markStr = logicMapList.get(0).get("MARK");

String leftStr = logicMapList.get(0).get("LEFT");

if ( !CommonBaseUtility.isEmptyValue(markStr)) {

markStr = markStr.trim().toUpperCase();

if ( markStr.equals("AND") || markStr.equals("&&")) {

markType = 1;

} else {

markType = 2;

}

}

if ( CommonParserUtility.hasCompareValue(rightStr) ) {

rightDTO = new CompareSyntaxBaseDTO(rightStr);

} else {

rightDTO = new CalculationSyntaxBaseDTO(rightStr);

}

if ( logicMapList != null && logicMapList.size() > 1 ) {

leftDTO = new LogicSyntaxBaseDTO(logicMapList.get(0).get("LEFT"));

} else {

if ( CommonParserUtility.hasCompareValue(leftStr) ) {

leftDTO = new CompareSyntaxBaseDTO(leftStr);

} else {

leftDTO = new CalculationSyntaxBaseDTO(leftStr);

}

}

} else {

if ( CommonParserUtility.hasLogicalValue(syntax) ) {

} else if ( CommonParserUtility.hasCompareValue(syntax)) {

} else if ( CommonParserUtility.hasCalculationValue(syntax)) {

}

}

return true;


}


@Override

public String getValue(Map<String, String> transMap) {

// TODO Auto-generated method stub

return null;

}


@Override

public boolean getLogicalValue(Map<String, String> transMap) {

// TODO Auto-generated method stub

if ( this.markType == 2 ) {

if ( rightDTO.getLogicalValue(transMap) ) {

return true;

}

if ( leftDTO == null ) {

System.out.println ( "Left class is null!!! Syntax is " + this.getSyntax() );

return false;

}

return leftDTO.getLogicalValue(transMap);

} else {

if ( !rightDTO.getLogicalValue(transMap)) {

return false;

}

return leftDTO.getLogicalValue(transMap);

}

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println ( false && false && false || true );


}


}


원칙적으로 모든 구문에는 ( ) 의 항목이 포함되어 있지 않아야 합니다. 

댓글 없음:

댓글 쓰기