Skip to content

Commit

Permalink
Added one more unification case
Browse files Browse the repository at this point in the history
  • Loading branch information
Polina Volkhontseva committed Oct 11, 2022
1 parent 89add5a commit 55fac16
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/main/dsl/rules.dsl
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ BinaryExpr(Name(#1), #2)<"||"> -> LogicalOr(Variable(Name(#1)), #2);
BinaryExpr(#1, Name(#2))<"||"> -> LogicalOr(#1, Variable(Name(#2)));

AssignExpr(#1, #2)<"="> -> SimpleAssignment(Variable(#1), #2);
AssignExpr(#1, #2)<"="> -> SimpleAssignment(#1, Variable(#2));
AssignExpr(#1, #2)<"+="> -> AdditionAssignment(Variable(#1), #2);
AssignExpr(#1, #2)<"-="> -> SubtractionAssignment(Variable(#1), #2);
AssignExpr(#1, #2)<"*="> -> MultiplicationAssignment(Variable(#1), #2);
Expand All @@ -218,7 +219,6 @@ AssignExpr(#1, #2)<">>="> -> RightShiftAssignment(Variable(#1), #2);
AssignExpr(#1, #2)<">>>="> -> UnsignedRightShiftAssignment(Variable(#1), #2);
AssignExpr(#1, #2)<"<<="> -> LeftShiftAssignment(Variable(#1), #2);


LogicalComplement(Name(#1)) -> LogicalNot(Variable(Name(#1)));
LogicalComplement(#1) -> LogicalNot(#1);

Expand Down Expand Up @@ -266,6 +266,7 @@ ArrayType(#1) -> ArrayType(#1, DimensionList(Dimension));
Parameter(#1, #2) -> Parameter(#1, #2);
Parameter(Modifier<#1>, #2, #3) -> Parameter(ModifierBlock(Modifier<#1>), #2, #3);
VoidType -> VoidType;
Modifier<#1> -> Modifier<#1>;

CompilationUnit(#1) -> Program(#1);

Expand Down Expand Up @@ -293,6 +294,7 @@ FieldDeclaration(VariableDeclarator(#1, #2)) -> FieldDeclaration(#1, DeclaratorL
FieldDeclaration(VariableDeclarator(#1, #2, #3)) -> FieldDeclaration(#1, DeclaratorList(Declarator(#2, #3)));

FieldDeclaration(Modifier<#3>, VariableDeclarator(#1, #2)) -> FieldDeclaration(ModifierBlock(Modifier<#3>), #1, DeclaratorList(Declarator(#2)));
FieldDeclaration(#1, #2, VariableDeclarator(#3, #4)) -> FieldDeclaration(ModifierBlock(#1, #2), #3, DeclaratorList(Declarator(#4)));
FieldDeclaration(Modifier<#4>, VariableDeclarator(#1, #2, #3)) -> FieldDeclaration(ModifierBlock(Modifier<#4>), #1, DeclaratorList(Declarator(#2, #3)));

// Function declaration FunctionDeclaration <- [modifiers@ModifierBlock], [typename@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;
Expand All @@ -315,6 +317,9 @@ MethodDeclaration(Modifier<#1>, #2, #3, #4, #5, #6, #7) ->
MethodDeclaration(Modifier<#1>, #2, #3, #4, #5, #6, #7, #8) ->
FunctionDeclaration(ModifierBlock(Modifier<#1>), #7, #2, ParameterBlock(#3, #4, #5, #6), #8);

ConstructorDeclaration(#1, #2, #3, #4, #5) ->
FunctionDeclaration(ModifierBlock(#1), #2, ParameterBlock(#3, #4), #5);

js:

ClassItem <- & | Property;
Expand Down Expand Up @@ -528,8 +533,6 @@ formalParameterList(#1...) -> ParameterBlock(#1);

python:

self -> This;

expr(atom(literal<#1>)) -> StringLiteral<#1>;
expr(atom(name(literal<#1>))) -> Variable(Name(Identifier<#1>));
expr(atom(integer(literal<#1>))) -> IntegerLiteral<#1>;
Expand All @@ -543,6 +546,9 @@ expr(#1, literal<"%">, #2) -> Modulus(#1, #2);

expr(atom(testlist_comp(#1))) -> #1;

atom(name(literal<"self">)) -> This;
expr(This, trailer(name(literal<#1>))) -> PropertyAccess(This, Identifier<#1>);

comparison(comparison(#1), literal<"==">, comparison(#2)) -> IsEqualTo(#1, #2);
comparison(comparison(#1), literal<"!=">, comparison(#2)) -> NotEqualTo(#1, #2);
comparison(comparison(#1), literal<">">, comparison(#2)) -> GreaterThan(#1, #2);
Expand Down
4 changes: 4 additions & 0 deletions src/test/resources/unification/this_expression/Self.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Car():
def __init__(self, name, year):
self.name = name
self.year = year
6 changes: 6 additions & 0 deletions src/test/resources/unification/this_expression/This.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Car {
constructor(name, year) {
this.name = name;
this.year = year;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class Car {
private final String name;

private final int year;

public Car(final String name, final int year) {
this.name = name;
this.year = year;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class Program {
private int result;

public int count() {
return this.result + 10;
}
}

1 comment on commit 55fac16

@0pdd
Copy link

@0pdd 0pdd commented on 55fac16 Oct 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to github. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20221011-23439-9h20sh [1]: + set -e + set -o pipefail + cd /tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA + pdd -v -f /tmp/20221011-23439-9h20sh My...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20221011-23439-9h20sh [1]:
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
+ pdd -v -f /tmp/20221011-23439-9h20sh

My version is 0.22.0
Ruby version is 2.7.5 at x86_64-linux
Reading from root dir /tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/project_structure.png is a binary file (28774 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_raw.png is a binary file (67906 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_unified.png is a binary file (30973 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_unified.png is a binary file (46534 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_unified.png is a binary file (30973 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_raw.png is a binary file (36349 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/comparison.png is a binary file (115513 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/synchronized_java.png is a binary file (14938 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_raw.png is a binary file (47973 bytes)
/tmp/0pdd20221011-14-u0spmg/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/test/resources/algorithms/ClassWithProperty_js.json is a binary file (709 bytes)
Reading .gitignore ...
Reading README.md ...
Reading .rultor.yml ...
Reading pom.xml ...
Reading LICENSE.txt ...
Reading .github/workflows/build_and_test.yml ...
Reading codecov.yml ...
Reading src/main/antlr/PythonParser.g4 ...
ERROR: ERROR: src/main/antlr/PythonParser.g4; PDD::Error at src/main/antlr/PythonParser.g4:128: TODO found, but puzzle can't be parsed, most probably because TODO is not followed by a puzzle marker, as this page explains: https://github.com/cqfn/pdd#how-to-format
If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/cqfn/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/cqfn/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:73:in `rescue in block in xml'
/app/objects/git_repo.rb:70:in `block in xml'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/tempfile.rb:291:in `open'
/app/objects/git_repo.rb:69:in `xml'
/app/objects/puzzles.rb:41:in `deploy'
/app/objects/jobs/job.rb:38:in `proceed'
/app/objects/jobs/job_starred.rb:32:in `proceed'
/app/objects/jobs/job_recorded.rb:31:in `proceed'
/app/objects/jobs/job_emailed.rb:33:in `proceed'
/app/objects/jobs/job_commiterrors.rb:33:in `proceed'
/app/objects/jobs/job_detached.rb:48:in `exclusive'
/app/objects/jobs/job_detached.rb:36:in `block in proceed'
/app/objects/jobs/job_detached.rb:36:in `fork'
/app/objects/jobs/job_detached.rb:36:in `proceed'
/app/0pdd.rb:530:in `process_request'
/app/0pdd.rb:367:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1686:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1686:in `block in compile!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1023:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1042:in `route_eval'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1023:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1071:in `block in process_route'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1069:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1069:in `process_route'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1021:in `block in route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1018:in `each'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1018:in `route!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1140:in `block in dispatch!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `block in invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1135:in `dispatch!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:949:in `block in call!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `block in invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `catch'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1112:in `invoke'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:949:in `call!'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:938:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/deflater.rb:44:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/xss_header.rb:18:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/path_traversal.rb:16:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/json_csrf.rb:26:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-protection-2.2.2/lib/rack/protection/frame_options.rb:31:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/logger.rb:17:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/common_logger.rb:38:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:255:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:248:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/method_override.rb:24:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:218:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1993:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1553:in `block in call'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1769:in `synchronize'
/app/vendor/bundle/ruby/2.7.0/gems/sinatra-2.2.2/lib/sinatra/base.rb:1553:in `call'
/app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.4/lib/rack/handler/webrick.rb:95:in `service'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/httpserver.rb:140:in `service'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/httpserver.rb:96:in `run'
/app/vendor/ruby-2.7.5/lib/ruby/2.7.0/webrick/server.rb:307:in `block in start_thread'

Please sign in to comment.