Home » Modeling » TMF (Xtext) » LanExpressions
LanExpressions [message #1792265] |
Fri, 13 July 2018 12:23  |
Eclipse User |
|
|
|
Hello.
I am having difficulties with implementing expressions in my DSL.
I have read https://typefox.io/parsing-expressions-with-xtext multiple times but still I am struggling to get it right.
Attached, please find DSL's .text file and some sample statements that needs to be parsed by the DSL.
Special Note:
Assignments and Equality Comparisons HAVE to share the same operator "="
Request
Please help me,
[*] understand what I am doing wrong.
[*] modify the DSL to be able to correctly parse the examples.mydsl
Thanks,
Christoff
|
|
| | |
Re: LanExpressions [message #1792299 is a reply to message #1792267] |
Sun, 15 July 2018 12:44   |
Eclipse User |
|
|
|
@Christian Dietrich, thanks for pointing out "VariableOrConstDef". Oops... My bad, silly mistake.
But, my problems are not yet over. :( . Refer to Parsing Errors below.
I have spent some time and:
1) Tried to debug the language using AntlrWorks,
as suggested by https://blogs.itemis.com/en/debugging-xtext-grammars-what-to-do-when-your-language-is-ambiguous.
To be honest, debugging of the Language got the better of me. I really need some help, thus Point (2) below.
2) Created a github project for my version of ExpressionDSL (github project link)
3) Created some initial Unit tests for the expected Parsing, refer ExpressionDSLParsingTest.xtend
4) Quick link to ExpressionDSL.xtext language definition
Request:
Please guide me on how to change the ExpressionDSL.xtext, to be able to succesfully pass the ExpressionDSLParsingTest.xtend unit tester.
Maven Install Error Log (extract):
Running org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest
log4j:WARN No appenders could be found for logger (org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser).
log4j:WARN Please initialize the log4j system properly.
Tests run: 15, Failures: 8, Errors: 0, Skipped: 0, Time elapsed: 1.59 sec <<< FAILURE! - in org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest
testExpressionOr(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.434 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:5 missing '(' at 'bC', XtextSyntaxDiagnostic: null:5 missing ')' at ';', XtextSyntaxDiagnostic: null:6 missing '(' at 'bB', XtextSyntaxDiagnostic: null:6 missing '(' at 'bC', XtextSyntaxDiagnostic: null:6 missing ')' at ';', XtextSyntaxDiagnostic: null:7 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing '(' at 'bB', XtextSyntaxDiagnostic: null:8 missing ';' at 'or', XtextSyntaxDiagnostic: null:8 missing ')' at 'bC', XtextSyntaxDiagnostic: null:8 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 mismatched input '<EOF>' expecting ')'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionOr(ExpressionDSLParsingTest.java:248)
testExpressionComparison(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.023 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:23 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:24 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:25 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:26 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:27 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:28 extraneous input '(' expecting ')'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionComparison(ExpressionDSLParsingTest.java:353)
testExpressionUnaryPlusOrMinus(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.019 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:1 mismatched input ':' expecting ';', XtextSyntaxDiagnostic: null:11 no viable alternative at input '-', XtextSyntaxDiagnostic: null:12 no viable alternative at input '+', XtextSyntaxDiagnostic: null:14 no viable alternative at input '-', XtextSyntaxDiagnostic: null:15 no viable alternative at input '+', XtextSyntaxDiagnostic: null:17 no viable alternative at input '-', XtextSyntaxDiagnostic: null:18 no viable alternative at input '+', XtextSyntaxDiagnostic: null:21 no viable alternative at input '-', XtextSyntaxDiagnostic: null:21 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:22 no viable alternative at input '+', XtextSyntaxDiagnostic: null:22 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:23 no viable alternative at input '-', XtextSyntaxDiagnostic: null:23 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:23 no viable alternative at input 'iA', XtextSyntaxDiagnostic: null:23 no viable alternative at input 'iB', XtextSyntaxDiagnostic: null:23 no viable alternative at input ')', XtextSyntaxDiagnostic: null:23 extraneous input ')' expecting ';', XtextSyntaxDiagnostic: null:25 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:26 mismatched input '(' expecting ';'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionUnaryPlusOrMinus(ExpressionDSLParsingTest.java:441)
testDeclarations(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.005 sec
testExpressionAtomic(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.005 sec
testFuncationCall01(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.003 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:2 no viable alternative at input ')'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testFuncationCall01(ExpressionDSLParsingTest.java:80)
testFuncationCall02(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.005 sec
testExpressionExponent(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0 sec
testExpressionAnd(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.012 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:5 missing '(' at 'bC', XtextSyntaxDiagnostic: null:5 missing ')' at ';', XtextSyntaxDiagnostic: null:6 missing '(' at 'bB', XtextSyntaxDiagnostic: null:6 missing '(' at 'bC', XtextSyntaxDiagnostic: null:6 missing ')' at ';', XtextSyntaxDiagnostic: null:7 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing '(' at 'bB', XtextSyntaxDiagnostic: null:8 missing ';' at 'and', XtextSyntaxDiagnostic: null:8 missing ')' at 'bC', XtextSyntaxDiagnostic: null:8 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 mismatched input '<EOF>' expecting ')'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionAnd(ExpressionDSLParsingTest.java:280)
testExpressionPrecedence(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0 sec
testAssignment01(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.014 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:23 mismatched input '=' expecting '(', XtextSyntaxDiagnostic: null:23 missing ';' at 'testfuncNoParmsReturnsINT', XtextSyntaxDiagnostic: null:23 no viable alternative at input ')', XtextSyntaxDiagnostic: null:24 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:25 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:26 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:27 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:28 mismatched input '(' expecting ';'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testAssignment01(ExpressionDSLParsingTest.java:172)
testExpressionFunctionExp(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.007 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:9 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:9 no viable alternative at input 'cA', XtextSyntaxDiagnostic: null:10 no viable alternative at input 'NOT', XtextSyntaxDiagnostic: null:10 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:10 no viable alternative at input 'cA', XtextSyntaxDiagnostic: null:12 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:14 mismatched input '(' expecting ';'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionFunctionExp(ExpressionDSLParsingTest.java:482)
testExpressionMulOrDiv(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0 sec
testExpressionBinaryPlusOrMinus(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0 sec
testExpressionPrimary01(org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest) Time elapsed: 0.008 sec <<< FAILURE!
java.lang.AssertionError: Unexpected errors: XtextSyntaxDiagnostic: null:6 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 missing ';' at 'bA', XtextSyntaxDiagnostic: null:8 missing '(' at 'not', XtextSyntaxDiagnostic: null:8 missing '(' at 'and', XtextSyntaxDiagnostic: null:8 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing ')' at ';', XtextSyntaxDiagnostic: null:9 missing '(' at 'and', XtextSyntaxDiagnostic: null:9 missing '(' at 'not', XtextSyntaxDiagnostic: null:9 mismatched input ')' expecting '(', XtextSyntaxDiagnostic: null:9 missing ')' at ';', XtextSyntaxDiagnostic: null:10 missing '(' at 'or', XtextSyntaxDiagnostic: null:10 missing '(' at 'bB', XtextSyntaxDiagnostic: null:10 missing ';' at 'and', XtextSyntaxDiagnostic: null:10 mismatched input 'not' expecting ')', XtextSyntaxDiagnostic: null:10 missing ')' at 'bC', XtextSyntaxDiagnostic: null:10 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:12 mismatched input 'bA' expecting ')', XtextSyntaxDiagnostic: null:12 no viable alternative at input '=', XtextSyntaxDiagnostic: null:12 mismatched input 'not' expecting ')', XtextSyntaxDiagnostic: null:12 missing ')' at ';', XtextSyntaxDiagnostic: null:13 mismatched input '(' expecting ')'
at org.xtext.example.expressiondsl.tests.ExpressionDSLParsingTest.testExpressionPrimary01(ExpressionDSLParsingTest.java:522)
Results :
Failed tests:
ExpressionDSLParsingTest.testAssignment01:172 Unexpected errors: XtextSyntaxDiagnostic: null:23 mismatched input '=' expecting '(', XtextSyntaxDiagnostic: null:23 missing ';' at 'testfuncNoParmsReturnsINT', XtextSyntaxDiagnostic: null:23 no viable alternative at input ')', XtextSyntaxDiagnostic: null:24 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:25 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:26 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:27 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:28 mismatched input '(' expecting ';'
ExpressionDSLParsingTest.testExpressionAnd:280 Unexpected errors: XtextSyntaxDiagnostic: null:5 missing '(' at 'bC', XtextSyntaxDiagnostic: null:5 missing ')' at ';', XtextSyntaxDiagnostic: null:6 missing '(' at 'bB', XtextSyntaxDiagnostic: null:6 missing '(' at 'bC', XtextSyntaxDiagnostic: null:6 missing ')' at ';', XtextSyntaxDiagnostic: null:7 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing '(' at 'bB', XtextSyntaxDiagnostic: null:8 missing ';' at 'and', XtextSyntaxDiagnostic: null:8 missing ')' at 'bC', XtextSyntaxDiagnostic: null:8 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 mismatched input '<EOF>' expecting ')'
ExpressionDSLParsingTest.testExpressionComparison:353 Unexpected errors: XtextSyntaxDiagnostic: null:23 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:24 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:25 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:26 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:27 extraneous input '(' expecting ')', XtextSyntaxDiagnostic: null:28 extraneous input '(' expecting ')'
ExpressionDSLParsingTest.testExpressionFunctionExp:482 Unexpected errors: XtextSyntaxDiagnostic: null:9 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:9 no viable alternative at input 'cA', XtextSyntaxDiagnostic: null:10 no viable alternative at input 'NOT', XtextSyntaxDiagnostic: null:10 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:10 no viable alternative at input 'cA', XtextSyntaxDiagnostic: null:12 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:14 mismatched input '(' expecting ';'
ExpressionDSLParsingTest.testExpressionOr:248 Unexpected errors: XtextSyntaxDiagnostic: null:5 missing '(' at 'bC', XtextSyntaxDiagnostic: null:5 missing ')' at ';', XtextSyntaxDiagnostic: null:6 missing '(' at 'bB', XtextSyntaxDiagnostic: null:6 missing '(' at 'bC', XtextSyntaxDiagnostic: null:6 missing ')' at ';', XtextSyntaxDiagnostic: null:7 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing '(' at 'bB', XtextSyntaxDiagnostic: null:8 missing ';' at 'or', XtextSyntaxDiagnostic: null:8 missing ')' at 'bC', XtextSyntaxDiagnostic: null:8 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 mismatched input '<EOF>' expecting ')'
ExpressionDSLParsingTest.testExpressionPrimary01:522 Unexpected errors: XtextSyntaxDiagnostic: null:6 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:8 missing ';' at 'bA', XtextSyntaxDiagnostic: null:8 missing '(' at 'not', XtextSyntaxDiagnostic: null:8 missing '(' at 'and', XtextSyntaxDiagnostic: null:8 missing '(' at 'bC', XtextSyntaxDiagnostic: null:8 missing ')' at ';', XtextSyntaxDiagnostic: null:9 missing '(' at 'and', XtextSyntaxDiagnostic: null:9 missing '(' at 'not', XtextSyntaxDiagnostic: null:9 mismatched input ')' expecting '(', XtextSyntaxDiagnostic: null:9 missing ')' at ';', XtextSyntaxDiagnostic: null:10 missing '(' at 'or', XtextSyntaxDiagnostic: null:10 missing '(' at 'bB', XtextSyntaxDiagnostic: null:10 missing ';' at 'and', XtextSyntaxDiagnostic: null:10 mismatched input 'not' expecting ')', XtextSyntaxDiagnostic: null:10 missing ')' at 'bC', XtextSyntaxDiagnostic: null:10 mismatched input ';' expecting '(', XtextSyntaxDiagnostic: null:12 mismatched input 'bA' expecting ')', XtextSyntaxDiagnostic: null:12 no viable alternative at input '=', XtextSyntaxDiagnostic: null:12 mismatched input 'not' expecting ')', XtextSyntaxDiagnostic: null:12 missing ')' at ';', XtextSyntaxDiagnostic: null:13 mismatched input '(' expecting ')'
ExpressionDSLParsingTest.testExpressionUnaryPlusOrMinus:441 Unexpected errors: XtextSyntaxDiagnostic: null:1 mismatched input ':' expecting ';', XtextSyntaxDiagnostic: null:11 no viable alternative at input '-', XtextSyntaxDiagnostic: null:12 no viable alternative at input '+', XtextSyntaxDiagnostic: null:14 no viable alternative at input '-', XtextSyntaxDiagnostic: null:15 no viable alternative at input '+', XtextSyntaxDiagnostic: null:17 no viable alternative at input '-', XtextSyntaxDiagnostic: null:18 no viable alternative at input '+', XtextSyntaxDiagnostic: null:21 no viable alternative at input '-', XtextSyntaxDiagnostic: null:21 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:22 no viable alternative at input '+', XtextSyntaxDiagnostic: null:22 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:23 no viable alternative at input '-', XtextSyntaxDiagnostic: null:23 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:23 no viable alternative at input 'iA', XtextSyntaxDiagnostic: null:23 no viable alternative at input 'iB', XtextSyntaxDiagnostic: null:23 no viable alternative at input ')', XtextSyntaxDiagnostic: null:23 extraneous input ')' expecting ';', XtextSyntaxDiagnostic: null:25 mismatched input '(' expecting ';', XtextSyntaxDiagnostic: null:26 mismatched input '(' expecting ';'
ExpressionDSLParsingTest.testFuncationCall01:80 Unexpected errors: XtextSyntaxDiagnostic: null:2 no viable alternative at input ')'
Tests run: 15, Failures: 8, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] org.xtext.example.expressiondsl.parent 1.0.0-SNAPSHOT SUCCESS [ 0.660 s]
[INFO] org.xtext.example.expressiondsl .................... SUCCESS [ 34.906 s]
[INFO] org.xtext.example.expressiondsl.ide ................ SUCCESS [ 3.808 s]
[INFO] org.xtext.example.expressiondsl.ui ................. SUCCESS [ 5.581 s]
[INFO] org.xtext.example.expressiondsl.target ............. SUCCESS [ 0.036 s]
[INFO] org.xtext.example.expressiondsl.tests .............. FAILURE [ 11.577 s]
[INFO] org.xtext.example.expressiondsl.ui.tests 1.0.0-SNAPSHOT SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
|
|
| |
Re: LanExpressions [message #1792307 is a reply to message #1792302] |
Sun, 15 July 2018 18:59   |
Eclipse User |
|
|
|
Thanks for your valuable input.
Christian Dietrich
is your grammar case insensitive if yes you have to tell xtext that
Yes, it is suppose to be case insensitive. Fixed the mwe2 workflow.
Christian Dietrich
i dont understand your FunctionExp thingy
This my a temp at catering for the "user-defined functions" in the Expressions Precedence.
This is a pain point, that I am struggling to get right.
Christian Dietrich
i dont understand functioncall
The grammar is suppose to be procedural.
The procedure call, may or may not return a value.
1) Thus to cater for the procedure call returns a value, and to comply with the Expressions Precedence.
I created the "VariableAssignment" rule that references expressions of which the "FunctionExp"ression rule is part off.
===> variable = functioncall();
2) To cater for when the procedure call does not return a value, nor is part of an Assignment expression.
I created the "FunctionCall" rule.
===> functioncall();
Christian Dietrich
i dont understand your semicolon concept
Currently, All the statements should be terminated by semicolons ";".
Christian Dietrich
i dont understand your unary expressions. usual pattrn is
UnaryExpression: MINUS Primary | Primary;
Primary: '(' Expressions ')' | Atom;
Thanks for the suggestion, but would this not "break" the expected Expressions Precedence when creating the AST?
Conclusion:
The Expressions Precedence is a Pain in my ass, and I am clearly not implementing it correctly.
But my understanding is that to get the AST correct for later processing, I need to define the "Expression" rule correctly
Questions:
1) How critical is building the AST to comply with the Precedence rules?
2)Should I rather manipulate the AST after parsing has been done?
References:
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/opprec.htm
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/expropt.htm
/* Expressions Precedence:
* --> ()
* --> Built-in functions, user-defined functions
* --> unary +, unary -, NOT
* --> **
* --> *, /
* --> binary +, binary -
* --> =, <>, >, >=, <, <=
* --> AND
* --> OR
*
***/
[Updated on: Sun, 15 July 2018 19:00] by Moderator
|
|
| |
Re: LanExpressions [message #1792320 is a reply to message #1792316] |
Mon, 16 July 2018 02:40  |
Eclipse User |
|
|
|
It works. Thanks.
[INFO] org.xtext.example.expressiondsl.parent 1.0.0-SNAPSHOT SUCCESS [ 0.352 s]
[INFO] org.xtext.example.expressiondsl .................... SUCCESS [ 41.408 s]
[INFO] org.xtext.example.expressiondsl.ide ................ SUCCESS [ 3.404 s]
[INFO] org.xtext.example.expressiondsl.ui ................. SUCCESS [ 5.133 s]
[INFO] org.xtext.example.expressiondsl.target ............. SUCCESS [ 0.031 s]
[INFO] org.xtext.example.expressiondsl.tests .............. SUCCESS [ 10.306 s]
[INFO] org.xtext.example.expressiondsl.ui.tests 1.0.0-SNAPSHOT SUCCESS [ 19.469 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:53 min
[INFO] Finished at: 2018-07-16T08:33:35+02:00
[INFO] ------------------------------------------------------------------------
I Feel like screaming Yatta!
My feelings as Gifs:
Over All - https://giphy.com/explore/yatta
But mostly - https://giphy.com/gifs/happy-japan-omg-26Ff4FsYx5d3UHlO8
Final Words:
Thank you very much, for the assistance.
Thread Solved
|
|
|
Goto Forum:
Current Time: Fri Jun 20 22:36:55 EDT 2025
Powered by FUDForum. Page generated in 0.05369 seconds
|