Commit 65087b24 authored by Benedikt Engeser's avatar Benedikt Engeser
Browse files

Merge branch 'master' of git@github.com:jroith/cup-eclipse.git

parents ce774ded 142978c2
...@@ -14,7 +14,10 @@ ...@@ -14,7 +14,10 @@
<target name="generate"> <target name="generate">
<jflex file="${jflex}/Lexer.jflex" destdir="${java}" /> <jflex file="${jflex}/Lexer.jflex" destdir="${java}" />
<cup srcfile="${cup}/Parser.cup" destdir="${java}" <cup srcfile="${cup}/Parser.cup" destdir="${java}"
parser="Parser" interface="true" locations="true" /> parser="Parser"
interface="true"
locations="true"
debugsymbols="true" />
</target> </target>
<path id="libraries"> <files includes="${lib}/java-cup-11b-runtime.jar" /> </path> <path id="libraries"> <files includes="${lib}/java-cup-11b-runtime.jar" /> </path>
......
...@@ -180,10 +180,6 @@ action code {: ...@@ -180,10 +180,6 @@ action code {:
} }
} }
Stack<ComplexSymbol> head_tokens = new Stack<ComplexSymbol> ();
List<IProductionRightPart> rhs_accumulator = new ArrayList<IProductionRightPart>(); List<IProductionRightPart> rhs_accumulator = new ArrayList<IProductionRightPart>();
protected void ast_add_rhs_part(IProductionRightPart part) protected void ast_add_rhs_part(IProductionRightPart part)
...@@ -201,13 +197,9 @@ action code {: ...@@ -201,13 +197,9 @@ action code {:
rhs_accumulator.clear(); rhs_accumulator.clear();
} }
protected void ast_add_precedence(ComplexSymbol head, Object lst) protected void ast_add_precedence(Object lst, Range range)
{ {
Precedence p = new Precedence(_cur_side, (List<Terminal>) lst, Precedence p = new Precedence(_cur_side, (List<Terminal>) lst, range);
new Range(Position.fromComplexSymbolLeft(head),
Position.fromComplexSymbolRight((ComplexSymbol) stack.peek()
)
));
parserResult.precedences.add(p); parserResult.precedences.add(p);
} }
...@@ -376,39 +368,35 @@ import_list ::= ...@@ -376,39 +368,35 @@ import_list ::=
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
import_spec ::= import_spec ::=
IMPORT {: IMPORT : import_token
head_tokens.push((ComplexSymbol) stack.peek());
:}
import_id import_id
{: SEMI : semi {:
/* save this import on the imports list */ /* save this import on the imports list */
context.import_list.push(multipart_name); context.import_list.push(multipart_name);
Import imprt = new Import( Import imprt = new Import(
new Name (multipart_name, null), // TODO: from, to new Name (multipart_name, null), // TODO: from, to
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), new Range(Position.fromLocation(import_tokenxleft),
Position.fromComplexSymbolRight((ComplexSymbol) cur_token))); Position.fromLocation(semixright)));
parserResult.imports.add(imprt); parserResult.imports.add(imprt);
/* reset the accumulated multipart name */ /* reset the accumulated multipart name */
multipart_name = new String(); multipart_name = new String();
:} :}
SEMI
; ;
class_name ::= class_name ::=
empty | empty |
CLASS {: CLASS : cls ID:id SEMI : semi
head_tokens.push((ComplexSymbol) stack.peek());
:} ID:id SEMI
{: {:
context.parser_class_name = id; context.parser_class_name = id;
context.symbol_const_class_name = id + "Sym"; context.symbol_const_class_name = id + "Sym";
parserResult.className = new ClassName ( parserResult.className = new ClassName (
new Name(id, null), //jrTODO: positions new Name(id, new Range(Position.fromLocation(idxleft),
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), Position.fromLocation(idxright))),
Position.fromComplexSymbolRight((ComplexSymbol) stack.peek()))); new Range(Position.fromLocation(clsxleft),
Position.fromLocation(semixright)));
:} :}
; ;
...@@ -425,9 +413,7 @@ code_parts ::= ...@@ -425,9 +413,7 @@ code_parts ::=
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
action_code_part ::= action_code_part ::=
ACTION {: ACTION CODE CODE_STRING : user_code opt_semi
head_tokens.push((ComplexSymbol) stack.peek());
:} CODE CODE_STRING : user_code opt_semi
{: {:
if (context.action_code!=null) if (context.action_code!=null)
errMan.Warning(ErrorSource.Parser, errMan.Warning(ErrorSource.Parser,
...@@ -435,11 +421,14 @@ action_code_part ::= ...@@ -435,11 +421,14 @@ action_code_part ::=
Position.fromLocation(user_codexleft)); Position.fromLocation(user_codexleft));
else { /* save the user included code string */ else { /* save the user included code string */
context.action_code = user_code; context.action_code = user_code;
int debug_id = get_new_debug_id();
parserResult.actionCode = new SpecialCodeBlock( parserResult.actionCode = new SpecialCodeBlock(
debug_id,
SpecialCodeBlock.BlockType.Action, SpecialCodeBlock.BlockType.Action,
user_code, user_code,
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), new Range(Position.fromLocation(user_codexleft),
Position.fromComplexSymbolRight((ComplexSymbol) cur_token))); // jrTODO! Position.fromLocation(user_codexright)));
} }
:} :}
; ;
...@@ -447,9 +436,7 @@ action_code_part ::= ...@@ -447,9 +436,7 @@ action_code_part ::=
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
parser_code_part ::= parser_code_part ::=
PARSER {: PARSER CODE CODE_STRING:user_code opt_semi
head_tokens.push((ComplexSymbol) stack.peek());
:} CODE CODE_STRING:user_code opt_semi
{: {:
if (context.parser_code!=null) if (context.parser_code!=null)
errMan.Warning(ErrorSource.Parser, errMan.Warning(ErrorSource.Parser,
...@@ -457,11 +444,13 @@ parser_code_part ::= ...@@ -457,11 +444,13 @@ parser_code_part ::=
Position.fromLocation(user_codexleft)); Position.fromLocation(user_codexleft));
else { /* save the user included code string */ else { /* save the user included code string */
context.parser_code = user_code; context.parser_code = user_code;
int debug_id = get_new_debug_id();
parserResult.parserCode = new SpecialCodeBlock( parserResult.parserCode = new SpecialCodeBlock(
debug_id,
SpecialCodeBlock.BlockType.Parser, SpecialCodeBlock.BlockType.Parser,
user_code, user_code,
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), new Range(Position.fromLocation(user_codexleft),
Position.fromComplexSymbolRight((ComplexSymbol) cur_token))); // jrTODO! Position.fromLocation(user_codexright)));
} }
:} :}
; ;
...@@ -469,20 +458,20 @@ parser_code_part ::= ...@@ -469,20 +458,20 @@ parser_code_part ::=
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
init_code ::= init_code ::=
INIT {: INIT WITH CODE_STRING:user_code opt_semi
head_tokens.push((ComplexSymbol) stack.peek());
:} WITH CODE_STRING:user_code opt_semi
{: {:
if (context.init_code!=null) if (context.init_code!=null)
errMan.Warning(ErrorSource.Parser, "Redundant init code (skipping)", errMan.Warning(ErrorSource.Parser, "Redundant init code (skipping)",
Position.fromLocation(user_codexleft)); Position.fromLocation(user_codexleft));
else {/* save the user code */ else {/* save the user code */
context.init_code = user_code; context.init_code = user_code;
int debug_id = get_new_debug_id();
parserResult.initCode = new SpecialCodeBlock( parserResult.initCode = new SpecialCodeBlock(
debug_id,
SpecialCodeBlock.BlockType.Init, SpecialCodeBlock.BlockType.Init,
user_code, user_code,
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), new Range(Position.fromLocation(user_codexleft),
Position.fromComplexSymbolRight((ComplexSymbol) cur_token))); // jrTODO! Position.fromLocation(user_codexright)));
} }
:} :}
; ;
...@@ -490,9 +479,7 @@ init_code ::= ...@@ -490,9 +479,7 @@ init_code ::=
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
scan_code ::= scan_code ::=
SCAN {: SCAN WITH CODE_STRING:user_code opt_semi
head_tokens.push((ComplexSymbol) stack.peek());
:} WITH CODE_STRING:user_code opt_semi
{: {:
if (context.scan_code!=null) if (context.scan_code!=null)
errMan.Warning(ErrorSource.Parser, "Redundant scan code (skipping)", errMan.Warning(ErrorSource.Parser, "Redundant scan code (skipping)",
...@@ -500,11 +487,13 @@ scan_code ::= ...@@ -500,11 +487,13 @@ scan_code ::=
else { else {
/* save the user code */ /* save the user code */
context.scan_code = user_code; context.scan_code = user_code;
int debug_id = get_new_debug_id();
parserResult.scanCode = new SpecialCodeBlock( parserResult.scanCode = new SpecialCodeBlock(
debug_id,
SpecialCodeBlock.BlockType.Scan, SpecialCodeBlock.BlockType.Scan,
user_code, user_code,
new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), new Range(Position.fromLocation(user_codexleft),
Position.fromComplexSymbolRight((ComplexSymbol) cur_token))); // jrTODO! Position.fromLocation(user_codexright)));
} }
:} :}
...@@ -654,15 +643,13 @@ precedence_l ::= precedence_l preced | preced; ...@@ -654,15 +643,13 @@ precedence_l ::= precedence_l preced | preced;
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
preced ::= preced ::=
PRECEDENCE PRECEDENCE : prec
{:
head_tokens.push((ComplexSymbol) stack.peek());
:}
preced_type preced_type
terminal_list:lst SEMI terminal_list:lst SEMI : semi
{: {:
ComplexSymbol head = head_tokens.pop(); ast_add_precedence(lst, new Range(
ast_add_precedence(head, lst); Position.fromLocation(precxleft),
Position.fromLocation(semixright)));
:} :}
; ;
...@@ -717,10 +704,8 @@ term_id ::= symbol_id:sym ...@@ -717,10 +704,8 @@ term_id ::= symbol_id:sym
/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
start_spec ::= start_spec ::=
START{: START : start WITH nt_id : start_name
head_tokens.push((ComplexSymbol) stack.peek()); SEMI : semi {:
:} WITH nt_id:start_name
{:
/* verify that the name has been declared as a non terminal */ /* verify that the name has been declared as a non terminal */
non_terminal nt = (non_terminal)non_terms.get(start_name); non_terminal nt = (non_terminal)non_terms.get(start_name);
if (nt == null) if (nt == null)
...@@ -745,16 +730,14 @@ start_spec ::= ...@@ -745,16 +730,14 @@ start_spec ::=
context.start_production = p; context.start_production = p;
new_rhs(); new_rhs();
//jrTODO: position, start symbol?, side effects? Range range = new Range(Position.fromLocation(startxleft),
Range range = new Range(Position.fromComplexSymbolLeft(head_tokens.pop()), Position.fromLocation(semixright));
Position.fromComplexSymbolRight((ComplexSymbol) stack.peek()));
Range innerRange = new Range(Position.fromLocation(start_namexleft), Range innerRange = new Range(Position.fromLocation(start_namexleft),
Position.fromLocation(start_namexright)); Position.fromLocation(start_namexright));
parserResult.startWith = new StartWith(new NonTerminal (
parserResult.startWith = new StartWith(new NonTerminal (new Name (start_name, innerRange), innerRange), range); new Name (start_name, innerRange), innerRange), range);
} }
:} :}
SEMI
| |
empty empty
; ;
......
...@@ -49,7 +49,7 @@ public class GetDebuggerMappingVisitor extends Visitor<Object> ...@@ -49,7 +49,7 @@ public class GetDebuggerMappingVisitor extends Visitor<Object>
this.mappings = new ArrayList<Mapping>(); this.mappings = new ArrayList<Mapping>();
} }
private void doCheck(ActionCodeBlock node) { private void doCheck(CodeBlock node) {
if (node == null) if (node == null)
return; return;
...@@ -73,6 +73,6 @@ public class GetDebuggerMappingVisitor extends Visitor<Object> ...@@ -73,6 +73,6 @@ public class GetDebuggerMappingVisitor extends Visitor<Object>
@Override @Override
public void postVisit (SpecialCodeBlock node, Object data) { public void postVisit (SpecialCodeBlock node, Object data) {
// doCheck(node); doCheck(node);
} }
} }
...@@ -6,15 +6,9 @@ import de.in.tum.www2.cup.analysis.AbstractVisitor; ...@@ -6,15 +6,9 @@ import de.in.tum.www2.cup.analysis.AbstractVisitor;
public class ActionCodeBlock extends CodeBlock public class ActionCodeBlock extends CodeBlock
implements IProductionRightPart implements IProductionRightPart
{ {
private int debugId;
public int getDebugId() {
return debugId;
}
public ActionCodeBlock(int debugId, String blob, Range range) { public ActionCodeBlock(int debugId, String blob, Range range) {
super(blob, range); super(debugId, blob, range);
this.debugId = debugId;
} }
@Override @Override
......
...@@ -4,11 +4,20 @@ import de.in.tum.www2.cup.Range; ...@@ -4,11 +4,20 @@ import de.in.tum.www2.cup.Range;
import de.in.tum.www2.cup.Position; import de.in.tum.www2.cup.Position;
public abstract class CodeBlock extends AbstractNode { public abstract class CodeBlock extends AbstractNode {
private int debugId;
private String blob;
public int getDebugId() {
return debugId;
}
public String blob; public String getBlob() {
return blob;
public CodeBlock(String blob, Range range) { }
public CodeBlock(int debugId, String blob, Range range) {
super(range); super(range);
this.debugId = debugId;
this.blob = blob; this.blob = blob;
} }
......
...@@ -19,8 +19,8 @@ public class SpecialCodeBlock extends CodeBlock ...@@ -19,8 +19,8 @@ public class SpecialCodeBlock extends CodeBlock
return bt; return bt;
} }
public SpecialCodeBlock(BlockType bt, String blob, Range range) { public SpecialCodeBlock(int debugId, BlockType bt, String blob, Range range) {
super(blob, range); super(debugId, blob, range);
this.bt = bt; this.bt = bt;
} }
......
...@@ -124,7 +124,7 @@ public class DocumentDidChangeJob extends Job { ...@@ -124,7 +124,7 @@ public class DocumentDidChangeJob extends Job {
IFile file = ((FileEditorInput) myEditor.getEditorInput()).getFile(); IFile file = ((FileEditorInput) myEditor.getEditorInput()).getFile();
CupEditorErrorReporter errorReporter = new CupEditorErrorReporter(file); CupEditorErrorReporter errorReporter = new CupEditorErrorReporter(file);
if (jobs.contains(JobsToDo.parseCode)) { if (jobs.contains(JobsToDo.parseCode)) {
InputStream in = new ByteArrayInputStream(codeText.getBytes()); InputStream in = new ByteArrayInputStream(codeText.getBytes());
...@@ -140,10 +140,10 @@ public class DocumentDidChangeJob extends Job { ...@@ -140,10 +140,10 @@ public class DocumentDidChangeJob extends Job {
e.printStackTrace(); e.printStackTrace();
} }
//errorReporter.pushToUIThread(); // errorReporter.pushToUIThread();
// TODO // TODO
// errorReporter.pushToUIThread(); // errorReporter.pushToUIThread();
if (result != null) { if (result != null) {
// System.out.println(result.toString()); // System.out.println(result.toString());
...@@ -160,31 +160,30 @@ public class DocumentDidChangeJob extends Job { ...@@ -160,31 +160,30 @@ public class DocumentDidChangeJob extends Job {
} else { } else {
return Status.CANCEL_STATUS; return Status.CANCEL_STATUS;
} }
} }
/*
if (jobs.contains(JobsToDo.buildTable)) { if (jobs.contains(JobsToDo.buildTable)) {
lalrResult = null; lalrResult = null;
// try { try {
// if (!p.hasParseErrors()) { // if (!p.hasParseErrors()) {
// lalrResult = LALRResult.Compute(context, lalrResult = LALRResult.Compute(context,
// context.start_production); context.start_production);
// } // }
// } catch (internal_error e) { } catch (internal_error e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// } }
errorReporter.pushToUIThread(); // errorReporter.pushToUIThread();
if (lalrResult != null) { if (lalrResult != null) {
LaLrResultJob resultLaLrModelJob = new LaLrResultJob(lalrResult, revNumber, context); LaLrResultJob resultLaLrModelJob = new LaLrResultJob(
lalrResult, revNumber, context);
resultLaLrModelJob.setSystem(true); resultLaLrModelJob.setSystem(true);
resultLaLrModelJob.schedule(); resultLaLrModelJob.schedule();
try { try {
...@@ -196,7 +195,7 @@ public class DocumentDidChangeJob extends Job { ...@@ -196,7 +195,7 @@ public class DocumentDidChangeJob extends Job {
} else { } else {
return Status.CANCEL_STATUS; return Status.CANCEL_STATUS;
} }
}*/ }
System.out.println(jobs); System.out.println(jobs);
...@@ -208,7 +207,7 @@ public class DocumentDidChangeJob extends Job { ...@@ -208,7 +207,7 @@ public class DocumentDidChangeJob extends Job {
CallbackJob cb = new CallbackJob(myEditor); CallbackJob cb = new CallbackJob(myEditor);
cb.setSystem(true); cb.setSystem(true);
cb.schedule(); cb.schedule();
return Status.OK_STATUS; return Status.OK_STATUS;
} }
...@@ -261,14 +260,15 @@ public class DocumentDidChangeJob extends Job { ...@@ -261,14 +260,15 @@ public class DocumentDidChangeJob extends Job {
LALRResult lalrResult; LALRResult lalrResult;
long lalrResulRevisionNumber; long lalrResulRevisionNumber;
CupContext lalrContext; CupContext lalrContext;
public LaLrResultJob(LALRResult result, long revisionNumber, CupContext context) { public LaLrResultJob(LALRResult result, long revisionNumber,
CupContext context) {
super("LaLr Result UI Job"); super("LaLr Result UI Job");
this.lalrResult = result; this.lalrResult = result;
this.lalrResulRevisionNumber = revisionNumber; this.lalrResulRevisionNumber = revisionNumber;
this.lalrContext = context; this.lalrContext = context;
} }
@Override @Override
public IStatus runInUIThread(IProgressMonitor monitor) { public IStatus runInUIThread(IProgressMonitor monitor) {
IDocumentProvider provider = myEditor.getDocumentProvider(); IDocumentProvider provider = myEditor.getDocumentProvider();
...@@ -277,15 +277,16 @@ public class DocumentDidChangeJob extends Job { ...@@ -277,15 +277,16 @@ public class DocumentDidChangeJob extends Job {
.getEditorInput()); .getEditorInput());
if (document != null) { if (document != null) {
Model model = Model.getInstanceForDocument(document); Model model = Model.getInstanceForDocument(document);
model.setLaLrResultModel(this.lalrResult, lalrResulRevisionNumber, lalrContext); model.setLaLrResultModel(this.lalrResult,
lalrResulRevisionNumber, lalrContext);
return Status.OK_STATUS; return Status.OK_STATUS;
} }
} }
return Status.CANCEL_STATUS; return Status.CANCEL_STATUS;
} }
} }
class SetupJob extends UIJob { class SetupJob extends UIJob {
private DocumentDidChangeJob documentDidChangeJob; private DocumentDidChangeJob documentDidChangeJob