Skip to content
21 changes: 21 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Tokenizer",
"request": "launch",
"mainClass": "token.Tokenizer",
"projectName": ""
},
{
"type": "java",
"name": "Current File",
"request": "launch",
"mainClass": "${file}"
}
]
}
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"cmake.configureOnOpen": true,
"java.debug.settings.onBuildFailureProceed": true
}
2 changes: 1 addition & 1 deletion Input.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
integer x equals 5
If x Or GGOInteger X equals 5GO
6 changes: 5 additions & 1 deletion TokenType.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ public enum TokenType
LONG,
STRING,
INVALID,
IF,
PRINT,
IF,
CONDITION,
AND,
OR,
EQUALS,
}
151 changes: 80 additions & 71 deletions Tokenizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,6 @@ public static void main(String[]args)
}catch(IOException e){
e.printStackTrace();
}
//Integer x equals 6
//Character b equals 5
//String[] tokens=testt.split(" ");
//for (String token : tokens)
//{System.out.print(token + ", ");}
//System.out.print("\n\n\n");

Tokenizer tokenizer=new Tokenizer();
try{
ArrayList<Token> listoftoken=tokenizer.tokenize(testt);
Expand All @@ -34,114 +27,130 @@ public static void main(String[]args)
{
System.out.println("ERROR");
}
//ExpressionTree tree=tokenizer.buildExpressionTree(listoftoken);
//Calculator calculator=new Calculator();
//double result=calculator.evaluate(tree.root);

//tree.traverseInOrder(tree.root);
//System.out.println("\nresult="+result);
//Integer Integer x equals 5
}
}
public static boolean isNumeric(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c)) {return false;}
}
return true;
}
}
boolean mathematicalexpression(String[] exp)
{
for(int i=3;i<exp.length;i++)
if((i%2==0&&(isNumeric(exp[i])||isValididentifier(exp[i])))||(i%2!=0&&isOperator(exp[i])))return false;
return true;
}
boolean isvalidcond(String[] GO)
{
int x=GO.length;
if (x==2)
{if(isValididentifier(GO[1])||isNumeric(GO[1]))return true;return false;}
else if(x==4)
{if(isValididentifier(GO[1])&&nextTokenType(GO[2])==TokenType.CONDITION&&(isValididentifier(GO[3])||isNumeric(GO[3])))return true;return false;}
else return false;
}
TokenType conditions(String ar)
{
if(ar.equals("And"))return TokenType.AND;else if (ar.equals("Or"))return TokenType.OR; else if (ar.equals("equals"))return TokenType.EQUALS;
else return TokenType.INVALID;
}
boolean isvalidInt(String[]str)
{
if(nextTokenType(str[0])==TokenType.INTEGER&&isValididentifier(str[1])&&isOperator(str[2])&&mathematicalexpression(str))
return true;
else return false;
}
public boolean isDataType(TokenType input)
{
if (input!=TokenType.NUMBER&&input!=TokenType.OPERATOR&&input!=TokenType.CHARACTER)return true;
return false;
if(input==TokenType.INTEGER||input==TokenType.DOUBLE||input==TokenType.LONG||input==TokenType.CHAR||input==TokenType.STRING)return true;return false;
}
boolean isLineType(TokenType input)
{
if(input==TokenType.PRINT||input==TokenType.IF)return true;return false;
}
public boolean isOperator(String input)
{
return (input.equals("equals")||input.equals('-')||input.equals('+')||input.equals('*')||input.equals('/')
||input.equals("plus")||input.equals("minus")||input.equals("times")||input.equals('=')||input.equals("by"));
}
public boolean isValididentifier(String input)
{
if(isOperator(input)||isDataType(nextTokenType(input))||isLineType(nextTokenType(input)))return false;return true;
}
boolean isConditionStatement(String input)
{
if(input.equals("If"))return true;return false;
}
boolean isPrintStatement(String input)
{
if(input.equals("Print")||input.equals("Print Line"))return true;return false;
}
public TokenType nextTokenType(String input)
{
//Character.isAlphabetic(input.charAt(0))
if(input.equals("Integer"))return TokenType.INTEGER;

else if(input.equals("String"))return TokenType.STRING;

else if(input.equals("Character"))return TokenType.CHAR;

else if(input.equals("Double"))return TokenType.DOUBLE;

else if(input.equals("Long"))return TokenType.LONG;

else if(isNumeric(input))return TokenType.NUMBER;

else if(input.equals("if"))return TokenType.IF;

else if(input.equals("Print")||input.equals("Print Line"))return TokenType.PRINT;

else if(input.length()==1)return TokenType.CHARACTER;
// else if(Character.isWhitespace(nextChar))
// {
// return TokenType.WHITESPACE;
// }
else if (isOperator(input))
{
return TokenType.OPERATOR;
}
else
{
return TokenType.INVALID;
}
else if(input.equals("If"))return TokenType.IF;
else if(input.equals("Print")||input.equals("Print Line"))return TokenType.PRINT;
else if (isOperator(input))return TokenType.OPERATOR;
else if(input.equals("Or")||input.equals("And")||input.equals("Equals"))return TokenType.CONDITION;
else return TokenType.INVALID;
}
public ArrayList<Token> tokenize(String input) throws IOException{
ArrayList<Token> result = new ArrayList<Token>();
String[] tokens=input.split(" ");
String[] tokens2=input.split("GO");
int stop=0;
// for(String token:tokens2){
// System.out.println(token);}

for(String token:tokens2){
System.out.println(token+"\n");
System.out.println("\n"+token+"\n");
String[] GO=token.split(" ");
try {
for (int i = 0; i < GO.length; i++) {
String token2 = GO[i];
TokenType k;LineType k2=LineType.ASSIGNMENT;
LineType k2;
System.out.println(GO[i]);

if (nextTokenType(GO[0])==TokenType.IF)
k2=LineType.CONDITION;
{
k2=LineType.CONDITION;
System.out.println("Condition statement");
}

else if (isDataType(nextTokenType(GO[0])))
k2=LineType.ASSIGNMENT;
{
k2=LineType.ASSIGNMENT;
System.out.println("Assignment statement");
}

else if (nextTokenType(GO[0])==TokenType.PRINT)
k2=LineType.PRINT;
else if(nextTokenType(GO[0])==TokenType.INVALID)k2=LineType.INVALID;
{
k2=LineType.PRINT;
System.out.println("Print statement");
}

else k2=LineType.INVALID;

if(k2==LineType.ASSIGNMENT)
{
if (i == 0 && !isDataType(nextTokenType(token2))) {
throw new Exception("Invalid data type declaration.");
}
//Character k equals kasfgjasdg
else if (nextTokenType(GO[0])==TokenType.CHAR&&nextTokenType(GO[3])!=TokenType.CHARACTER)
if (nextTokenType(GO[0])==TokenType.CHAR&&nextTokenType(GO[3])!=TokenType.CHARACTER)
{throw new Exception("ERROR! Declared token type should be CHARACTER");}
result.add(new Token(token2, nextTokenType(token2)));
else if(nextTokenType(GO[0])==TokenType.INTEGER&&!isvalidInt(GO)){throw new Exception("ERROR! Declared Integer assignment invalid");}
else {result.add(new Token(token2, nextTokenType(token2)));}
}
else if(k2==LineType.CONDITION)
{
if(!isvalidcond(GO)) {throw new Exception("ERROR! INVALID CONDITION STATEMENT");}
}
}
} catch (Exception e) {
e.printStackTrace();System.exit(1);
}
}
// for(Token token4:result)
// {
// System.out.println(token4.tokenValue+" "+token4.tokenType);
// }
return result;
}


// public ExpressionTree buildExpressionTree(ArrayList<Token> tokens)
// {
// ExpressionTree tree = new ExpressionTree();
// tree.buildTree(tokens);
// return tree;
// }




}