Solved

long code with one problem

Posted on 2003-11-02
5
240 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

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

733 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