Solved

long code with one problem

Posted on 2003-11-02
5
241 Views
Last Modified: 2010-03-31
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
Comment
Question by:badr1981
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 9669322
i suggest this one


where ever you use nextToken(), put like this

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

hope you got my idea
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 9669330
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
 
LVL 92

Accepted Solution

by:
objects earned 30 total points
ID: 9669361
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
 
LVL 92

Expert Comment

by:objects
ID: 9692703
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
ID: 9699010
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
The viewer will learn how to implement Singleton Design Pattern in Java.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

718 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question