Comments (3)
Hah, funny how that works out sometimes.
Great that you got to the bottom of it so quickly - and looks like there's a bit more work to do 😁
from blark.
Definitely glad that it popped out sooner rather than later! 😀 It'll take me a bit of poking around to figure out exactly what I'm overlooking in the transformer that's causing the grief. Reverting my silliness, everything parses correctly, but there does seem to be some issue with the the transformer having trouble with the InputParameterAssignment
s:
E AssertionError: Transformed object does not produce identical source code
E assert 'VAR_IN_OUT\n... 3);\nEND_VAR' == 'VAR_IN_OUT\n... 3);\nEND_VAR'
E Skipping 258 identical leading characters in diff, use -v to show
E - := (A := 1, B := 2, C := 3);
E + := (A := [1, B := 2], C := 3);
E ? + +
E fbTest : FB_Test := (1, 2, 3);
E END_VAR
blark\tests\test_transformer.py:31: AssertionError
------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------
Transformed:
InputOutputDeclarations(attrs=None, items=[VariableOneInitDeclaration(variables=[DeclaredVariable(variable=SimpleVariable(name=Token('IDENTIFIER', 'iValue'), dereferenced=False), location=None)], init=TypeInitialization(indirection=None, spec=SimpleSpecification(type=Token('DOTTED_IDENTIFIER', 'INT')), value=None)), StringVariableInitDeclaration(variables=[DeclaredVariable(variable=SimpleVariable(name=Token('IDENTIFIER', 'sValue'), dereferenced=False), location=None)], spec=StringTypeSpecification(type_name=Token('STRING', 'STRING'), length=None), value=Token('SINGLE_BYTE_CHARACTER_STRING', "'abc'"), init=_GenericInit(base_type_name='STRING', full_type_name='STRING', repr="STRING := 'abc'", value="'abc'")), StringVariableInitDeclaration(variables=[DeclaredVariable(variable=SimpleVariable(name=Token('IDENTIFIER', 'wsValue'), dereferenced=False), location=None)], spec=StringTypeSpecification(type_name=Token('WSTRING', 'WSTRING'), length=None), value=Token('DOUBLE_BYTE_CHARACTER_STRING', '"abc"'), init=_GenericInit(base_type_name='WSTRING', full_type_name='WSTRING', repr='WSTRING := "abc"', value='"abc"')), FunctionBlockInvocationDeclaration(variables=[Token('IDENTIFIER', 'fbTest')], init=FunctionCall(name=SimpleVariable(name=Token('IDENTIFIER', 'FB_Test'), dereferenced=False), parameters=[InputParameterAssignment(name=None, value=Integer(value=Token('INTEGER', '1'), type_name=None)), InputParameterAssignment(name=None, value=Integer(value=Token('INTEGER', '2'), type_name=None)), InputParameterAssignment(name=None, value=Integer(value=Token('INTEGER', '3'), type_name=None))], dereferenced=False), defaults=None), FunctionBlockInvocationDeclaration(variables=[Token('IDENTIFIER', 'fbTest')], init=FunctionCall(name=SimpleVariable(name=Token('IDENTIFIER', 'FB_Test'), dereferenced=False), parameters=[InputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'A'), dereferenced=False), value=Integer(value=Token('INTEGER', '1'), type_name=None)), InputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'B'), dereferenced=False), value=Integer(value=Token('INTEGER', '2'), type_name=None)), OutputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'C'), dereferenced=False), value=Integer(value=Token('INTEGER', '3'), type_name=None), inverted=False)], dereferenced=False), defaults=None), FunctionBlockInvocationDeclaration(variables=[Token('IDENTIFIER', 'fbTest')], init=FunctionCall(name=SimpleVariable(name=Token('IDENTIFIER', 'FB_Test'), dereferenced=False), parameters=[InputParameterAssignment(name=None, value=Integer(value=Token('INTEGER', '1'), type_name=None)), InputParameterAssignment(name=None, value=Integer(value=Token('INTEGER', '2'), type_name=None)), InputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'A'), dereferenced=False), value=Integer(value=Token('INTEGER', '1'), type_name=None)), InputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'B'), dereferenced=False), value=Integer(value=Token('INTEGER', '2'), type_name=None)), OutputParameterAssignment(name=SimpleVariable(name=Token('IDENTIFIER', 'C'), dereferenced=False), value=Integer(value=Token('INTEGER', '3'), type_name=None), wsValue : WSTRING := "abc"; fbTest : FB_Test(1, 2, 3); fbTest : FB_Test(A := 1, B := 2, C => 3); fbTest : FB_Test(1, 2, A := 1, B := 2, C => 3); fbTest : FB_Test(initializer := 5) := (A := [1, B := 2], C := 3); fbTest : FB_Test := (1, 2, 3);END_VAR
===================================================================================================== short test summary info ======================================================================================================
FAILED blark/tests/test_transformer.py::test_input_roundtrip[input_declarations-VAR_INPUT RETAIN\n fbTest : FB_Test := (A := 1, B := 2, C := 3);\nEND_VAR] - AssertionError: Transformed object does not produce identical source code
FAILED blark/tests/test_transformer.py::test_input_output_roundtrip[input_output_declarations-VAR_IN_OUT\n iValue : INT;\n sValue : STRING := 'abc';\n wsValue : WSTRING := "abc";\n fbTest : FB_Test(1, 2, 3);\n fbTest : FB_Test(A := 1, B := 2, C => 3);\n fbTest : FB_Test(1, 2, A := 1, B := 2, C => 3);\n fbTest : FB_Test(initializer := 5) := (A := 1, B := 2, C := 3);\n fbTest : FB_Test := (1, 2, 3);\nEND_VAR] - AssertionError: Transformed object does not produce identical source code
We'll get there, though!!!
from blark.
Wouldn't ya know it... This is self-inflicted! 🤦 Hah! I'm looking at some mechanisms to resolve it by reverting a little bit of my changes surrounding the changes I made here: https://github.com/klauer/blark/blob/master/blark/iec.lark#L338-L339. 😅
from blark.
Related Issues (20)
- Support TwinCAT solutions/project/source code files directly HOT 2
- Add Support for Multi-Line Object Oriented Function-Block Usage HOT 2
- Dereferenced Variables in Function Calls Not Parsing Correctly HOT 1
- Explicit support for base 10/decimal literals HOT 1
- Remove `method_statement` from grammar HOT 1
- Fail to Parse Array of Arrays
- Variables Containing the word "Return" Incorrectly Identified as `RETURN` Statements. HOT 3
- Array of Pointer to Structure using Addresses Dereferencing by Index Failing to Parse HOT 1
- `POINTER TO STRING(c_Size - 1);` Not Parsing Correctly HOT 7
- Language features in upcoming TwinCAT 4026 release HOT 1
- Double-asterisk (`**`) exponential operator is not supported by TwinCAT
- Need Support for `JMP` Statements
- Variable with underscore HOT 7
- Failure to Parse POINTER TO Object using FB_Init HOT 8
- Add GitHub Actions job to deploy API documentation HOT 1
- apischema as a non-optional requirement? HOT 1
- Syntax Parsing Failure - Accessing an Attribute on a Dereferenced Pointer Returned from a Method Doesn't Work HOT 1
- Comments in output tree?
- Repeated Variable Declaration in Structure with a Single Structured Data Type Fails to Parse
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from blark.