SemanticApplicationDesignLanguage / sadl

Semantic Application Design Language (SADL) Open Source Code
http://semanticapplicationdesignlanguage.github.io/sadl/
Eclipse Public License 1.0
30 stars 12 forks source link

Translation exception when working with broken AST #268

Open kittaakos opened 6 years ago

kittaakos commented 6 years ago

I got errors on the additional_grammar_changes branch with the following broken model:

 uri "http://sadl.org/TestExpandedInQuery.sadl" alias TestExpandedInQuery.

 PhysicalObject is a class described by weight with values of type UnittedQuantity>.

 MonaLisa is a PhysicalObject> with weight> 25 lbs.
 AngelOak is a PhysicalObject> with weight> 10000 lbs.

 Ask: weight>.
 Ask: weight> of x.
 Ask: x has weight>.
 Ask Q1: x has weight>.
 Ask: weight> of AngelOak>.
 Ask: AngelOak> has weight>.
 Ask: select po> where po has weight>.
 Ask: select po>, w> where po has weight w.
 Ask: select po>, v>, u> where po has weight> w and w> has ^value v and w> has unit u.
 Ask: select po>, v>, u> where po has weight w and w> has ^value v and w> has unit u and v> > 1000.
 Ask: select p> where p is a PhysicalObject>.
 Ask Named: select p> where p is a PhysicalObject>.

Error:

com.ge.research.sadl.reasoner.TranslationException: Failed to add crule variable, index is out of sequence expected
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.addCruleVariable(JenaBasedSadlModelProcessor.java:8771)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:3730)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2742)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.translate(JenaBasedSadlModelProcessor.java:2728)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:2963)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2925)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2733)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.translate(JenaBasedSadlModelProcessor.java:2728)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2830)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2733)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.translate(JenaBasedSadlModelProcessor.java:2728)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processAsk(JenaBasedSadlModelProcessor.java:2255)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2048)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:2775)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:1869)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1047)
    at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:947)
    at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:69)
    at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:90)
    at com.ge.research.sadl.validation.ResourceValidator.lambda$0(ResourceValidator.java:54)
    at org.eclipse.xtext.util.OnChangeEvictingCache.get(OnChangeEvictingCache.java:77)
    at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:56)
    at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:91)
    at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:1)
    at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:26)
    at org.eclipse.xtext.resource.OutdatedStateManager.exec(OutdatedStateManager.java:91)
    at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.internalReadOnly(XtextDocument.java:520)
    at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.readOnly(XtextDocument.java:492)
    at org.eclipse.xtext.ui.editor.model.XtextDocument.readOnly(XtextDocument.java:133)
    at org.eclipse.xtext.ui.editor.validation.ValidationJob.createIssues(ValidationJob.java:86)
    at org.eclipse.xtext.ui.editor.validation.ValidationJob.run(ValidationJob.java:67)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
kittaakos commented 6 years ago

Maybe it does not make much sense to run the model processor and validator when we have any syntax errors. Adding a guard to model processor or to the ResourceValidator would solve the problem:

if (resource.getErrors().stream().anyMatch(diagnostic -> diagnostic instanceof XtextSyntaxDiagnostic)) {
  return;
}
crapo commented 6 years ago

This is related to a current issue being discussed with the business users. There is a request that syntax errors be ignored if they do not affect any requirements. That seems an odd test, but the .sadl files are created automatically from another source and if a syntax error in a .sadl file did not result in an ontology (.owl file) that caused any errors in .sreq or .sver files, one could conceivably "ignore" the errors. That would entail running the model processor, as now happens, and the saving of whatever is generated, if there is valid content, in a .owl file, which does not currently happen. It's possible that there could be a preference to control this to get either extreme behavior.