Bläddra i källkod

Merge branch 'master' into rust

Robin Maisch 4 år sedan
förälder
incheckning
285aa6203b

+ 1 - 1
README.md

@@ -48,7 +48,7 @@ Usage: JPlag [ options ] [ <root-dir> ... ] [ -new <new-dir> ... ] [ -old <old-d
 
 named arguments:
   -h, --help       show this help message and exit
-  -l               {java,python3,cpp,csharp,golang,kotlin,rlang,rust,scala,char,text,scheme,emf-metamodel,emf-metamodel-dynamic} Select the language to parse the submissions (default: java)
+  -l               {java,python3,cpp,csharp,golang,kotlin,rlang,rust,scala,text,scheme,emf-metamodel,emf-metamodel-dynamic} Select the language to parse the submissions (default: java)
   -bc BC           Path of the directory containing the base code (common framework used in all submissions)
   -v               {quiet,long} Verbosity of the logging (default: quiet)
   -d               Debug parser. Non-parsable files will be stored (default: false)

+ 0 - 4
jplag.cli/pom.xml

@@ -60,10 +60,6 @@
             <groupId>de.jplag</groupId>
             <artifactId>scheme</artifactId>
         </dependency>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>chars</artifactId>
-        </dependency>
         <dependency>
             <groupId>de.jplag</groupId>
             <artifactId>emf-metamodel</artifactId>

+ 0 - 16
jplag.frontend.chars/pom.xml

@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>de.jplag</groupId>
-        <artifactId>aggregator</artifactId>
-        <version>${revision}</version>
-    </parent>
-    <artifactId>chars</artifactId>
-    <dependencies>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>frontend-utils</artifactId>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 52
jplag.frontend.chars/src/main/java/de/jplag/chars/CharToken.java

@@ -1,52 +0,0 @@
-package de.jplag.chars;
-
-import de.jplag.Token;
-
-public class CharToken extends Token {
-
-    private final int index;
-    private final Character character;
-
-    public CharToken(int type, String file, int index, Character character, Parser parser) {
-        super(type, file, -1);
-        this.index = index;
-        this.character = character;
-    }
-
-    public CharToken(int type, String file, Parser parser) {
-        this(type, file, -1, null, parser);
-    }
-
-    @Override
-    public int getLine() {
-        return index; // so that the result-index is sorted correctly
-    }
-
-    @Override
-    public int getIndex() {
-        return index;
-    }
-
-    @Override
-    public void setLine(int line) {
-        // Do nothing!
-    }
-
-    @Override
-    public void setColumn(int column) {
-        // Do nothing!
-    }
-
-    @Override
-    public void setLength(int length) {
-        // Do nothing!
-    }
-
-    @Override
-    protected String type2string() {
-        if (character == null) {
-            return "FILE_END";
-        }
-        return character.toString();
-    }
-}

+ 0 - 57
jplag.frontend.chars/src/main/java/de/jplag/chars/Language.java

@@ -1,57 +0,0 @@
-package de.jplag.chars;
-
-import java.io.File;
-
-import de.jplag.TokenList;
-
-/*
- * read in text files as characters
- */
-public class Language implements de.jplag.Language {
-
-    private final Parser parser;
-
-    public Language() {
-        parser = new Parser();
-    }
-
-    @Override
-    public String[] suffixes() {
-        return new String[] {".TXT", ".txt", ".ASC", ".asc", ".TEX", ".tex"};
-    }
-
-    @Override
-    public String getName() {
-        return "Character Parser";
-    }
-
-    @Override
-    public String getShortName() {
-        return "char";
-    }
-
-    @Override
-    public int minimumTokenMatch() {
-        return 10;
-    }
-
-    @Override
-    public TokenList parse(File dir, String[] files) {
-        return this.parser.parse(dir, files);
-    }
-
-    @Override
-    public boolean hasErrors() {
-        return this.parser.hasErrors();
-    }
-
-    @Override
-    public boolean supportsColumns() {
-        return false;
-    }
-
-    @Override
-    public boolean isPreformatted() {
-        return false;
-    }
-}

+ 0 - 192
jplag.frontend.chars/src/main/java/de/jplag/chars/Parser.java

@@ -1,192 +0,0 @@
-package de.jplag.chars;
-
-import java.io.File;
-import java.io.FileReader;
-import java.nio.charset.StandardCharsets;
-
-import de.jplag.AbstractParser;
-import de.jplag.TokenConstants;
-import de.jplag.TokenList;
-
-public class Parser extends AbstractParser {
-
-    private TokenList tokens;
-
-    /**
-     * Creates the parser.
-     */
-    public Parser() {
-        super();
-    }
-
-    public TokenList parse(File directory, String[] files) {
-        tokens = new TokenList();
-        errors = 0;
-        for (String file : files) {
-            logger.trace("Parsing file {}", file);
-            if (!parseFile(directory, file))
-                errors++;
-            tokens.addToken(new CharToken(TokenConstants.FILE_END, file, this));
-        }
-        if (errors == 0)
-            logger.trace("OK");
-        else
-            logger.error(errors + " ERROR" + (errors > 1 ? "S" : ""));
-
-        return tokens;
-    }
-
-    private boolean parseFile(File dir, String file) {
-        char[] buffer = new char[4096];
-        int type;
-        int length;
-        int offset = 0;
-
-        try (FileReader reader = new FileReader(new File(dir, file), StandardCharsets.UTF_8)) {
-            do {
-                length = reader.read(buffer);
-
-                for (int i = 0; i < length; i++) {
-                    if (buffer[i] <= 127 && (type = mapping[buffer[i]]) > 1) {
-                        tokens.addToken(new CharToken(type, file, offset + i, buffer[i], this));
-                    }
-                }
-                offset += length;
-            } while (length != -1);
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            return false;
-        }
-        return true;
-    }
-
-    private final int[] mapping = {-1, // 0 (nul)
-            -1, // 1 (soh)
-            -1, // 2 (stx)
-            -1, // 3 (etx)
-            -1, // 4 (eot)
-            -1, // 5 (enq)
-            -1, // 6 (ack)
-            -1, // 7 (bel)
-            -1, // 8 (bs)
-            -1, // 9 (ht)
-            -1, // 10 (nl)
-            -1, // 11 (vt)
-            -1, // 12 (np)
-            -1, // 13 (cr)
-            -1, // 14 (so)
-            -1, // 15 (si)
-            -1, // 16 (dle)
-            -1, // 17 (dc1)
-            -1, // 18 (dc2)
-            -1, // 19 (dc3)
-            -1, // 20 (dc4)
-            -1, // 21 (nak)
-            -1, // 22 (syn)
-            -1, // 23 (etb)
-            -1, // 24 (can)
-            -1, // 25 (em)
-            -1, // 26 (sub)
-            -1, // 27 (esc)
-            -1, // 28 (fs)
-            -1, // 29 (gs)
-            -1, // 30 (rs)
-            -1, // 31 (us)
-            -1, // 32 (sp)
-            -1, // 33 !
-            -1, // 34 "
-            -1, // 35 #
-            -1, // 36 $
-            -1, // 37 %
-            -1, // 38 &
-            -1, // 39 '
-            -1, // 40 (
-            -1, // 41 )
-            -1, // 42 *
-            -1, // 43 +
-            -1, // 44 ,
-            -1, // 45 -
-            -1, // 46 .
-            -1, // 47 /
-            27, // 48 0
-            28, // 49 1
-            29, // 50 2
-            30, // 51 3
-            31, // 52 4
-            32, // 53 5
-            33, // 54 6
-            34, // 55 7
-            35, // 56 8
-            36, // 57 9
-            -1, // 58 :
-            -1, // 59 ;
-            -1, // 60 <
-            -1, // 61 =
-            -1, // 62 >
-            -1, // 63 ?
-            -1, // 64 @
-            2, // 65 A
-            3, // 66 B
-            4, // 67 C
-            5, // 68 D
-            6, // 69 E
-            7, // 70 F
-            8, // 71 G
-            9, // 72 H
-            10, // 73 I
-            11, // 74 J
-            12, // 75 K
-            13, // 76 L
-            14, // 77 M
-            15, // 78 N
-            16, // 79 O
-            17, // 80 P
-            18, // 81 Q
-            19, // 82 R
-            20, // 83 S
-            21, // 84 T
-            22, // 85 U
-            23, // 86 V
-            24, // 87 W
-            25, // 88 X
-            26, // 89 Y
-            27, // 90 Z
-            -1, // 91 [
-            -1, // 92 \
-            -1, // 93 ]
-            -1, // 94 ^
-            -1, // 95 _
-            -1, // 96 `
-            2, // 97 a
-            3, // 98 b
-            4, // 99 c
-            5, // 100 d
-            6, // 101 e
-            7, // 102 f
-            8, // 103 g
-            9, // 104 h
-            10, // 105 i
-            11, // 106 j
-            12, // 107 k
-            13, // 108 l
-            14, // 109 m
-            15, // 110 n
-            16, // 111 o
-            17, // 112 p
-            18, // 113 q
-            19, // 114 r
-            20, // 115 s
-            21, // 116 t
-            22, // 117 u
-            23, // 118 v
-            24, // 119 w
-            25, // 120 x
-            26, // 121 y
-            27, // 122 z
-            -1, // 123 {
-            -1, // 124 |
-            -1, // 125 }
-            -1, // 126 ~
-            -1, // 127 (del)
-    };
-}

+ 16 - 0
jplag.frontend.emf-metamodel-dynamic/README.md

@@ -0,0 +1,16 @@
+# Dynamic EMF metamodel language frontend
+The dynamic EMF metamodel language frontend allows the use of JPlag with metamodel submissions.
+It is based on the EMF API.
+
+### EMF specification compatibility
+This frontend is based on the EMF dependencies available on maven central. These might not be the newest versions of EMF. For details, the [JPlag aggregator pom](https://github.com/jplag/JPlag/blob/263e85e544152cc8b0caa3399127debb7a458746/pom.xml#L84-L86).
+
+### Token Extraction
+For the token extraction, we visit the containment tree of the metamodel and extract tokens for certain metamodel elements based on their metaclass. In this module, we extract tokens based on a [handcrafted token set](https://github.com/jplag/JPlag/blob/263e85e544152cc8b0caa3399127debb7a458746/jplag.frontend.emf-metamodel/src/main/java/de/jplag/emf/MetamodelTokenConstants.java). Note that not for all concrete metaclasses tokens are extracted. `EFactory`, `EGenericType`, and `EObject` are ignored. Moreover, for some metaclasses, multiple token types are extracted. Finally, some references are also used for token extraction.
+ 
+
+### Usage
+To use this frontend, add the `-l emf-metamodel` flag in the CLI, or use a `JPlagOption` object set to `LanguageOption.EMF` in the Java API as described in the usage information in the [readme of the main project](https://github.com/jplag/JPlag#usage) and [in the wiki](https://github.com/jplag/JPlag/wiki/1.-How-to-Use-JPlag).
+
+### More Info
+More information can be found in the paper *"Token-based Plagiarism Detection for Metamodels"* (MODELS-C 2022, accepted for publication, link coming soon). 

+ 15 - 0
jplag.frontend.emf-metamodel/README.md

@@ -0,0 +1,15 @@
+# EMF metamodel language frontend
+The EMF metamodel language frontend allows the use of JPlag with metamodel submissions.
+It is based on the EMF API.
+
+### EMF specification compatibility
+This frontend is based on the EMF dependencies available on maven central. These might not be the newest versions of EMF. For details, the [JPlag aggregator pom](https://github.com/jplag/JPlag/blob/263e85e544152cc8b0caa3399127debb7a458746/pom.xml#L84-L86).
+
+### Token Extraction
+For the token extraction, we visit the containment tree of the metamodel and extract tokens for all metamodel elements based on their concrete metaclass. In this module, we thus extract tokens based on a [dynamic token set](https://github.com/jplag/JPlag/blob/263e85e544152cc8b0caa3399127debb7a458746/jplag.frontend.emf-metamodel-dynamic/src/main/java/de/jplag/emf/dynamic/DynamicMetamodelTokenConstants.java).
+
+### Usage
+To use this frontend, add the `-l emf-metamodel-dynamic` flag in the CLI, or use a `JPlagOption` object set to `LanguageOption.EMF_DYNAMIC` in the Java API as described in the usage information in the [readme of the main project](https://github.com/jplag/JPlag#usage) and [in the wiki](https://github.com/jplag/JPlag/wiki/1.-How-to-Use-JPlag).
+
+### More Info
+More information can be found in the paper *"Token-based Plagiarism Detection for Metamodels"* (MODELS-C 2022, accepted for publication, link coming soon). 

+ 0 - 4
jplag/pom.xml

@@ -65,10 +65,6 @@
             <groupId>de.jplag</groupId>
             <artifactId>scheme</artifactId>
         </dependency>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>chars</artifactId>
-        </dependency>
         <dependency>
             <groupId>de.jplag</groupId>
             <artifactId>emf-metamodel</artifactId>

+ 0 - 7
pom.xml

@@ -191,11 +191,6 @@
                 <artifactId>scheme</artifactId>
                 <version>${revision}</version>
             </dependency>
-            <dependency>
-                <groupId>de.jplag</groupId>
-                <artifactId>chars</artifactId>
-                <version>${revision}</version>
-            </dependency>
             <dependency>
                 <groupId>de.jplag</groupId>
                 <artifactId>emf-metamodel</artifactId>
@@ -485,7 +480,6 @@
             <modules>
                 <module>jplag.frontend-utils</module>
                 <module>jplag.frontend-testutils</module>
-                <module>jplag.frontend.chars</module>
                 <module>jplag.frontend.cpp</module>
                 <module>jplag.frontend.csharp-6</module>
                 <module>jplag.frontend.golang</module>
@@ -512,7 +506,6 @@
             <modules>
                 <module>jplag.frontend-utils</module>
                 <module>jplag.frontend-testutils</module>
-                <module>jplag.frontend.chars</module>
                 <module>jplag.frontend.cpp</module>
                 <module>jplag.frontend.csharp-6</module>
                 <module>jplag.frontend.golang</module>