• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 246
  • Last Modified:

long code with one problem

sorry about this code but it is very long and i fam facing problem with it
this is the code

import java.io.*;
import java.util.*;

public class SIM{  
     
      public static void main(String[] args) throws IOException {
           
      BufferedReader stdin = new BufferedReader(new FileReader("SIM.txt"));
     
  //sim1    
        String st_p = stdin.readLine();
             StringTokenizer ss=new StringTokenizer(st_p);
            String b=ss.nextToken();
             
              int a=2;
          double bc=0.02;
             
              if (!b.equalsIgnoreCase("start_program")){
                   System.out.println("Sytax error");
                         
              }
             
              else if (b.equalsIgnoreCase("Start_program")){
                                         
                        b=ss.nextToken();
 //sim1
               
                           
                     while((st_p = stdin.readLine())!=null){
                           st_p = stdin.readLine();
                     
                      if(st_p.equalsIgnoreCase("Begin_Define")){ //sim2
               
               String en_p;
               StringTokenizer st;
               String bd2;
               
               while((en_p = stdin.readLine())!=null){
                      if(en_p.equals(""))continue;  
                    st=new StringTokenizer(en_p);
                    if(st.hasMoreTokens()){
                    bd2=st.nextToken();    
                     
                  if(!bd2.equalsIgnoreCase("End_program")){  
                           while(!bd2.equalsIgnoreCase("End_Define;")) {
                   
                 if(bd2.equalsIgnoreCase("Var")) {
                         
                                       bd2=st.nextToken();                    
                               
            while(!bd2.equals(";")) {
                                                                                               
                                                      while (st.hasMoreTokens()){
                                            bd2=st.nextToken();
                                           
                                                          if(bd2.equals(":")){
                                                                
                                            bd2=st.nextToken();
                                 
                                            if(bd2.equalsIgnoreCase("Integer")||bd2.equalsIgnoreCase("real")){
                                                 System.out.println("Good Grammer");                                                
                                            }
                                            else{ System.out.println("bad Grammer");}                                        
                                        }                                      
                                    }    
                                    }
                          }
                          else if(bd2.equalsIgnoreCase("Constant")) {
                         
                                       bd2=st.nextToken();                    
                               
                                   while(!bd2.equals(";")) {
                                   
                                                      while (st.hasMoreTokens()){
                                            bd2=st.nextToken();
                                           
                                                          if(bd2.equals("=")){
                                                                
                                            bd2=st.nextToken();
                                 
                                            if(bd2.equals("+")||bd2.equals("-")){
                                                bd2=st.nextToken();
                                               
                                                if(bd2.equals(Integer.toString(a))||bd2.equals(Double.toString(bc))){
                                                  System.out.println("good Grammer");
                                                  }
                                            }
                                            else if(bd2.equalsIgnoreCase("Null")){
                                                  
                                            }
                                           
                                            else{ System.out.println("bad Grammer");}                                        
                                        }                                      
                                    }    
                              }
                        }
                    en_p = stdin.readLine();
                           st=new StringTokenizer(en_p);
                           if (st.hasMoreTokens()){
                           bd2=st.nextToken();   }
                           
                           } //sim2  
                           
                           //sim3
                     if(en_p.equalsIgnoreCase("Begin_Block")){
           
               
               while((en_p = stdin.readLine())!=null){
                      if(en_p.equals(""))continue;  
                    st=new StringTokenizer(en_p);
                    if(st.hasMoreTokens()){
                    bd2=st.nextToken();    
                     
                           while(!bd2.equalsIgnoreCase("End_Block;")) {
                                 
                                 if(bd2.equalsIgnoreCase("read")) {
                                       
                                       bd2=st.nextToken();
                                       if (bd2.equals("(")){                                             
                                             
                                             while (st.hasMoreTokens()){
                                                                               
                                        while (!bd2.equals(";")) {  
                                               bd2=st.nextToken();
                                              
                                                                if(bd2.equals(",")){
                                                                
                                                  bd2=st.nextToken();}
                                              else if (bd2.equals(")")) {
                                                    bd2=st.nextToken();
                                              }
                                          }
                                          System.out.println("read");
                                 }
                             }
                         }
                         else if(bd2.equalsIgnoreCase("write")) {
                                       
                                       bd2=st.nextToken();
                                       if (bd2.equals("(")){                                             
                                             
                                             while (st.hasMoreTokens()){
                                                                               
                                        while (!bd2.equals(";")) {  
                                               bd2=st.nextToken();
                                              
                                                                if(bd2.equals(",")){
                                                                
                                                  bd2=st.nextToken();}
                                              else if (bd2.equals(")")) {
                                                    bd2=st.nextToken();
                                              }
                                          }
                                          System.out.println("write");
                                 }
                             }
                         }
                         else if(bd2.equalsIgnoreCase("write")||!bd2.equalsIgnoreCase("read")){
                         if(st.hasMoreTokens()){
                         bd2=st.nextToken();
                         while (!bd2.equals(";")){
                               
                               if(bd2.equals(":=")){                                     
                                     bd2=st.nextToken();
                                     if(bd2.equals("(")){
                                           bd2=st.nextToken();
                                           
                               while(st.hasMoreTokens()&& !bd2.equals(")")){
                                                 bd2=st.nextToken();
                                     if(bd2.equals("*")||bd2.equals("/")){
                                                       bd2=st.nextToken();
                                                 }
                                           }
                                           bd2=st.nextToken();                                                                                
                                                            if(bd2.equals("+")||bd2.equals("-")){
                                                                  bd2=st.nextToken();
                                                      
                                                      }
                                                System.out.println("brack");      
                                                }
                                                else{
                                                            while (st.hasMoreTokens()){
                                                                  bd2=st.nextToken();
                                                            if (bd2.equals("-")||bd2.equals("+")||bd2.equalsIgnoreCase("null")){
                                                                  bd2=st.nextToken();
                                                            }
                                                            }
                                                      System.out.println("expr");      
                                                }       
                                          }
                                          else if(st.hasMoreTokens()){
                                          bd2=st.nextToken();                  
                                          }
                                                     
                         }
                          }
                      }
                    en_p = stdin.readLine();
                           st=new StringTokenizer(en_p);
                           if (st.hasMoreTokens()){
                           bd2=st.nextToken();   }
                    }
                }
                        }
                    }//sim3
                           
                           
                           
                           
                           
                           }            
                      if(st.hasMoreTokens()){            
                         bd2=st.nextToken();}
                         if(!bd2.equals(b)){
                               System.out.println(bd2);
                               System.out.println("Program name is not matching");
                               }
             if(bd2.equals(b)){
                   if (st.hasMoreTokens()){
                           bd2=st.nextToken();   }
                                                          
             if(bd2.equals(";")){
                   System.out.println("Good Grammer");
                                     return;}
                               }
                   }
                         }                                                      
              }  
          }
          
            }
      }
    }

this code reading from a text file called SIM and this file like this

start_program sa

Begin_Define

constant yaer = + 2 ;
constant ret = - 0.02 ;

var basic, grade : integer ;
var adj_salary : real ;
var comp_A_amount : real ;

end_define;

Begin_block

adj := ( grade * year ) + basic ;

ret := adj * rat ;

read ( basic , grade ) ;
write ( basic , good ) ;

end_block;

end_program sa ;

it gave me the following exception
good Grammer
good Grammer
Good Grammer
Good Grammer
Good Grammer
Exception in thread "main" java.lang.NullPointerException
        at java.util.StringTokenizer.<init>(StringTokenizer.java:119)
        at java.util.StringTokenizer.<init>(StringTokenizer.java:149)
        at SIM.main(SIM.java:99)
Press any key to continue...


can you help me please
0
badr1981
Asked:
badr1981
  • 3
  • 2
1 Solution
 
sudhakar_koundinyaCommented:
i suggest this one


where ever you use nextToken(), put like this

st.nextToken()==null?"":stnextToken();

hope you got my idea
0
 
sudhakar_koundinyaCommented:
You are using toknizer in different code areas,

so where ever it is there replace the next token with it

st.nextToken()==null?"":st.nextToken();
ss.nextToken()==null?"":ss.nextToken();

and so on
0
 
objectsCommented:
You don't always check that readLine() has returned a line.
The following is setting en_p to null.

                    en_p = stdin.readLine();
                         st=new StringTokenizer(en_p);
0
 
objectsCommented:
0
 
sudhakar_koundinyaCommented:
badr1981's code
 while((en_p = stdin.readLine())!=null){
                     if(en_p.equals(""))continue;  
                    st=new StringTokenizer(en_p);

objects code
                         en_p = stdin.readLine();
                         st=new StringTokenizer(en_p);


i haven't find any basic difference between two codes. Just curious to know if there is any difference

:-)
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now