//-------------------------------------------------------------------------------------------------- // // @ CopyRight Roberti & Parau Enterprises, Inc. 2021-2023 // // This work is licensed under the Creative Commons Attribution-NoDerivatives 4.0 International License. // To view a copy of this license, visit http://creativecommons.org/licenses/by-nd/4.0/ // or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. // //-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // // OpCode parameter class // //-------------------------------------------------------------------------------------------------- package framework; import java.util.ArrayList; public class DVOpCodeParm { // // Internal class positional parameter // public class PositionalParm { protected PositionalParm(DVExpression parameter) { this.parameter= parameter; DVOpCodeParm.this.posParmList.add(this); } // // Add a sub parameter // protected void addSubParameter(DVExpression subParameter) { this.subParmList.add(new SubParm(subParameter)); } // // Getter methods // public SubParm getSubParm(int n) { if (this.subParmList.size() < n+1) return null; return this.subParmList.get(n); } public int getSubParmListSize() { return this.subParmList.size(); } public SubParm[] getSubParmList() { return this.subParmList.toArray(new SubParm[this.subParmList.size()]); } public DVExpression getParameter() { return this.parameter; } public DVExpression.ExprToken getParameterValue() { return this.parameterValue; } // // Class fields // protected final DVExpression parameter; protected DVExpression.ExprToken parameterValue; protected final ArrayList subParmList= new ArrayList(4); } // // Internal class subParm // public class SubParm { protected SubParm(DVExpression subParm) { this.subParm= subParm; } // // Getter methods // public DVExpression getSubParm() { return this.subParm; } public DVExpression.ExprToken getSubParmValue() { return this.subParmValue; } // // Class fields // protected final DVExpression subParm; protected DVExpression.ExprToken subParmValue; } // // Internal class key parameters // public class KeyWordParm { protected KeyWordParm(Token keyWord) { this(keyWord, null); } protected KeyWordParm(Token keyWord, DVExpression parameter) { this.keyWord= keyWord; this.keyValue= keyWord.image.substring(0, keyWord.image.length()-1).toUpperCase(); this.parameter= parameter; DVOpCodeParm.this.keyWordParmList.add(this); } // // Getter methods // public Token getKeyWord() { return this.getKeyWord(); } public String getKeyValue() { return this.keyValue; } public DVExpression getParameter() { return this.parameter; } public DVExpression.ExprToken getValue() { return value; } // // Class fields // protected final Token keyWord; protected final String keyValue; protected final DVExpression parameter; protected DVExpression.ExprToken value; } // // Getter methods // public PositionalParm getPositionalParm(int n) { if (this.posParmList.size() < n+1) return null; return this.posParmList.get(n); } public int getPositionalParmListSize() { return this.posParmList.size(); } public PositionalParm[] getPositionalParmList() { return this.posParmList.toArray(new PositionalParm[this.posParmList.size()]); } public int getKeyWordParmListSize() { return this.keyWordParmList.size(); } public KeyWordParm[] getKeyWordParmList() { return this.keyWordParmList.toArray(new KeyWordParm[this.keyWordParmList.size()]); } public KeyWordParm[] getKeyWordParmIndex() { return this.keyWordParmIndex; } public void setPrivateObject(Object obj) { this.privateObject= obj; } public Object getPrivateObject() { return this.privateObject; } public DVExpression getPositionalParameter(int n) { if (this.posParmList.size() > n) return this.posParmList.get(n).parameter; return null; } public DVExpression.ExprToken getPositionalParameterValue(int n) { if (this.posParmList.size() > n) return this.posParmList.get(n).parameterValue; return null; } public DVExpression.ExprToken getPositionalFirstTokenIfSingle(int n) { if (this.posParmList.size() > n) return this.posParmList.get(n).parameter.getFirstTokenIfSingle(); return null; } public int getSubParmListSize(int n) { if (this.posParmList.size() > n) return this.posParmList.get(n).subParmList.size(); return 0; } public SubParm[] getSubParmList(int n) { if (this.posParmList.size() > n) return this.posParmList.get(n).subParmList.toArray(new SubParm[this.posParmList.get(n).subParmList.size()]); return null; } public KeyWordParm getKeyWordParm(int index) { if (this.keyWordParmIndex == null) return null; return this.keyWordParmIndex[index]; } public SubParm getSubParm(int n, int m) { SubParm spl[]= this.getSubParmList(n); if (spl.length > m) return null; return spl[m]; } // // Class field // protected final ArrayList posParmList= new ArrayList(4); protected final ArrayList keyWordParmList= new ArrayList(4); protected KeyWordParm[] keyWordParmIndex= null; public Object privateObject= null; }