From 2aa90220f8a6a51dc84abb6c1dbb85db0b204f42 Mon Sep 17 00:00:00 2001 From: cristic Date: Thu, 15 Apr 2004 20:20:48 +0000 Subject: [PATCH] Added the name of the file to the error report. Changed some error msgs. --- Repair/RepairCompiler/MCC/CDL.cup | 6 +- Repair/RepairCompiler/MCC/Compiler.java | 3 + Repair/RepairCompiler/MCC/MDL.cup | 5 +- Repair/RepairCompiler/MCC/SDL.cup | 5 +- Repair/RepairCompiler/MCC/TDL.cup | 6 +- Repair/RepairCompiler/compiler-steps.txt | 52 ++++++++++-------- .../java_cup/runtime/lr_parser.class | Bin 9880 -> 9775 bytes .../java_cup/runtime/lr_parser.java | 4 +- .../runtime/virtual_parse_stack.class | Bin 1513 -> 1508 bytes 9 files changed, 48 insertions(+), 33 deletions(-) diff --git a/Repair/RepairCompiler/MCC/CDL.cup b/Repair/RepairCompiler/MCC/CDL.cup index e6df103..e77068d 100755 --- a/Repair/RepairCompiler/MCC/CDL.cup +++ b/Repair/RepairCompiler/MCC/CDL.cup @@ -56,13 +56,15 @@ action code {: init with {: :} parser code {: + + public String filename; public void syntax_error (java_cup.runtime.Symbol current) { CUP$CDLParser$actions.errors = true; Symbol symbol = (Symbol) current; - report_error("CDL: Syntax error at line " + (symbol.line + 1) - + ", column " + LineCount.getColumn(symbol.left) + ": " + current.value, current); + report_error(filename+":"+(symbol.line+1)+": Syntax error at column " + LineCount.getColumn(symbol.left) +": " + current.value, current); + System.exit(0); } public void report_fatal_error (String message, Object info) { diff --git a/Repair/RepairCompiler/MCC/Compiler.java b/Repair/RepairCompiler/MCC/Compiler.java index cc1f0de..c2d1612 100755 --- a/Repair/RepairCompiler/MCC/Compiler.java +++ b/Repair/RepairCompiler/MCC/Compiler.java @@ -249,6 +249,7 @@ public class Compiler { LineCount.reset(); FileInputStream infile = new FileInputStream(state.infile + ".struct"); TDLParser parser = new TDLParser(new Lexer(infile)); + parser.filename = state.infile + ".struct"; CUP$TDLParser$actions.debug = state.verbose > 1 ; state.ptStructures = (ParseNode) parser.parse().value; } catch (FileNotFoundException fnfe) { @@ -284,6 +285,7 @@ public class Compiler { LineCount.reset(); FileInputStream infile = new FileInputStream(state.infile + ".space"); SDLParser parser = new SDLParser(new Lexer(infile)); + parser.filename = state.infile + ".space"; CUP$SDLParser$actions.debug = state.verbose > 1 ; state.ptSpace = (ParseNode) parser.parse().value; } catch (FileNotFoundException fnfe) { @@ -301,6 +303,7 @@ public class Compiler { LineCount.reset(); FileInputStream infile = new FileInputStream(state.infile + ".constraints"); CDLParser parser = new CDLParser(new Lexer(infile)); + parser.filename = state.infile + ".constraints"; CUP$CDLParser$actions.debug = state.verbose > 1 ; state.ptConstraints = (ParseNode) parser.parse().value; } catch (FileNotFoundException fnfe) { diff --git a/Repair/RepairCompiler/MCC/MDL.cup b/Repair/RepairCompiler/MCC/MDL.cup index b8a2ad1..0a3aa09 100755 --- a/Repair/RepairCompiler/MCC/MDL.cup +++ b/Repair/RepairCompiler/MCC/MDL.cup @@ -63,9 +63,8 @@ parser code {: CUP$MDLParser$actions.errors = true; Symbol symbol = (Symbol) current; - report_error(filename+": Syntax error at line " + -(symbol.line + 1) + ", column " + LineCount.getColumn(symbol.left) + -": " + current.value, current); + report_error(filename+":"+(symbol.line+1)+": Syntax error at column " + LineCount.getColumn(symbol.left) +": " + current.value, current); + System.exit(0); } public void report_fatal_error (String message, Object info) { diff --git a/Repair/RepairCompiler/MCC/SDL.cup b/Repair/RepairCompiler/MCC/SDL.cup index f8997e9..ee5172c 100755 --- a/Repair/RepairCompiler/MCC/SDL.cup +++ b/Repair/RepairCompiler/MCC/SDL.cup @@ -56,13 +56,16 @@ action code {: init with {: :} parser code {: + + public String filename; public void syntax_error (java_cup.runtime.Symbol current) { CUP$SDLParser$actions.errors = true; Symbol symbol = (Symbol) current; - report_error("SDL: Syntax error at line " + (symbol.line + 1) + report_error("TDL: Syntax error at line " + (symbol.line + 1) + ", column " + LineCount.getColumn(symbol.left) + ": " + current.value, current); + System.exit(0); } public void report_fatal_error (String message, Object info) { diff --git a/Repair/RepairCompiler/MCC/TDL.cup b/Repair/RepairCompiler/MCC/TDL.cup index c616b94..db35ad5 100755 --- a/Repair/RepairCompiler/MCC/TDL.cup +++ b/Repair/RepairCompiler/MCC/TDL.cup @@ -56,13 +56,15 @@ action code {: init with {: :} parser code {: + + public String filename; public void syntax_error (java_cup.runtime.Symbol current) { CUP$TDLParser$actions.errors = true; Symbol symbol = (Symbol) current; - report_error("TDL: Syntax error at line " + (symbol.line + 1) - + ", column " + LineCount.getColumn(symbol.left) + ": " + current.value, current); + report_error(filename+":"+(symbol.line+1)+": Syntax error at column " + LineCount.getColumn(symbol.left) +": " + current.value, current); + System.exit(0); } public void report_fatal_error (String message, Object info) { diff --git a/Repair/RepairCompiler/compiler-steps.txt b/Repair/RepairCompiler/compiler-steps.txt index 8c321b4..336662f 100755 --- a/Repair/RepairCompiler/compiler-steps.txt +++ b/Repair/RepairCompiler/compiler-steps.txt @@ -1,27 +1,33 @@ -1. Copy SimpleHash.h and .c to the working directory and add - include "Simplehash.h" +Step 1: Building Compiler +------------------------- +cd RepairCompiler/MCC +make clean +make -2. Create function - void assertvalidmemory(int low, int high) { - } - -3. Create function - void calltool(Type name) - * this is equiv to establishing a mapping in the interpreter version - * Type should be the type of the variable being mapped - * the name of the formal paremater should be the name of the variable - used in the specs - * multiple parameters for multiple mappings - * the body of the function should contain only - #include "spec-file.cc", - where the files spec-file.* contain the specs -4. Declare global variables in specs.struct +Step 2: Run Compiler +-------------------- +Example: +For the specifs in ex.constraints, ex.struct, ex.space, ex.abstract, ex.model +in directory Repair/Ex: -5. In RepairCompiler/MCC, generate the .cc file: - java -cp ../ MCC.Compiler spec-file, - where spec-file.* contain the specs +A) cd Ex +B) java -classpath MCC.Compiler ex -6. Compile the program under analysis - g++ program.c SimpleHash.cc libchecker.a -o program - \ No newline at end of file +which builds: + ex.cc + ex_aux.h + ex_aux.cc + size.h + size.cc + + +Step 3: Compile checker +----------------------- + +A) copy generated files into Runtime directory +B) remove old object files rm *.o +C) run ./buildruntime +D) build checking object: g++ -g -c ex_aux.cc +E) g++ -g ex_test.cc *.o +F) run ./a.out diff --git a/Repair/RepairCompiler/java_cup/runtime/lr_parser.class b/Repair/RepairCompiler/java_cup/runtime/lr_parser.class index 13347a8f0e15e093acb450494e59dd995858bd2f..f7b0ffab586802823ffb19feec9f137f7cebade5 100755 GIT binary patch literal 9775 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 SZ^ioU>U)s$$B<8>pZo(Dl6rXn literal 9880 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 Vp%VXHNxvezqJ`JeG%UWw$ZwZMV3Pm< delta 673 zcmZ9K%T5z<6vlu5nUR@JhZYKo$gLIuow2l7#VewKcP<(eo9=8xjh95DsEM1tfSTy6 zd~h4Xg`zs+3P*i`W6B-hh7&F)T}~xPG2xTuv_>Ws&UlZ=m7Xy0eHKgxXpH~admhL?)Twki*dJr%`Z$KaY0YeN2Tp|p( z%$4}3DQ0Gs&XNx}$Xvh(`{OZdGC9vez*Ry+DXy8W_?^{nM=ZpjtnX2`>9_iS(nPG%=bPUPK#pBLUDR36UWfF^ZTGvU#dTmM9Z|T&|W7~{wNxT!T62SSCdIqLzt{sBi7T3IvpPxS%NwV+!Z`PsPl+7 zC6gnc_y)4784wZZLNCtYV(Qzs=g@CcvBbn+D0Wlq-6Wekxl(~vH2Nk{)l zcQvJVm$zeXSjYdn(Tg1e^UVtx`51YT)_L>N$P(MGg?f*ke~%#{{o~*jZM>GEQF&Vw F{s1