Parsing Winx sourcecode into an interpretable JSON format

This commit is contained in:
2024-04-24 23:32:28 +03:00
parent cab0263c81
commit 1bffeb13ef
23 changed files with 1250 additions and 1001 deletions

15
pom.xml
View File

@@ -14,4 +14,19 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.13.1</version>
</dependency>
</dependencies>
</project> </project>

View File

@@ -2,54 +2,45 @@ grammar Winx;
// Lexer rules // Lexer rules
ID : [a-zA-Z]+ ; ID : [a-zA-Z]+ ;
STRING : '"' ~'"'* '"' ;
NEWLINE : [\r\n]+ -> skip;
COMMENT : ('~' ~[~]*? '~') | ('//' ~[\r\n]* NEWLINE) ;
WS : [ \t\r\n]+ -> skip ;
INT : [0-9]+ ; INT : [0-9]+ ;
FLOAT : [0-9]+ '.' [0-9]* | '.' [0-9]+ ; FLOAT : [0-9]+ '.' [0-9]* | '.' [0-9]+ ;
STRING : '"' ('\\' ["\\] | ~["\\])* '"';
WS : [ \t\r\n]+ -> skip ;
// Flexible handling of comments
COMMENT : ('~' .*? '~') -> channel(HIDDEN);
LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
// Parser rules // Parser rules
winx : package+ ;
winx : (package | COMMENT)+;
body : (interface | specification| COMMENT)+ ;
// Hierarchies
package : 'package' ID '{' body '}' ; package : 'package' ID '{' body '}' ;
interface : importance? access_modifiers? 'interface' ID '{' spec_body '}' ; body : (interface | specification)* ;
specification : 'specification' ID ('implements' ID)? '{' spec_body '}' ; interface : importance? 'interface' ID '{' spec_body '}' ;
spec_body : (requirement_spec | function_spec)+ ; specification: 'specification' ID impls? '{' spec_body '}' ;
impls : ('implements' ID) ;
spec_body : (requirement_spec | function_spec)* ;
// Non-functional Requirements requirement_spec: importance? ID '{' req_specification* result_specification* '}' ;
requirement_spec : comment? importance? ID '{' req_specification* result_specification* '}' ; req_specification: importance? '@' ID (logical_op ID)* ';' ;
req_specification : comment? importance? '@' ID (logical_op ID)* ';' ; result_specification: 'result' importance? ID ';' ;
result_specification : comment? 'result' importance? ID ';' ; function_spec: importance? access_modifiers? ID '(' input_types? ')' impls? function_body ;
logical_op : 'AND' | 'OR' ; function_body: '{' specification_entry* return_type '}';
// Functional Requirements
function_spec : comment? importance? access_modifiers? ID'(' input_types? ')' ('implements' ID)? function_body;
function_body : '{' specification_entry* return_types '}';
input_types : variable (',' variable)* ; input_types : variable (',' variable)* ;
return_types : 'return' variable (',' variable)* ';' ; return_type : 'return' variable ';' ;
specification_entry : comment? '@' ID ':'STRING';'; specification_entry: '@' ID ':' STRING ';' ;
// General Rules
variable : type '[]'? ID; variable : type '[]'? ID;
@@ -64,21 +55,21 @@ type : 'INT'
| 'VOID' | 'VOID'
| STRING; | STRING;
access_modifiers : 'public' access_modifiers: 'public'
| 'protected' | 'protected'
| 'private' | 'private'
| 'default'; | 'default';
comment : COMMENT; // Logical operators if needed for parsing complexity within annotations
logical_op : 'AND' | 'OR';
// Symbols // Symbols
LPAREN : '(' ; LPAREN : '(';
RPAREN : ')' ; RPAREN : ')';
COLON : ':' ; COLON : ':';
SEMICOLON : ';' ; SEMICOLON : ';';
COMMA : ',' ; COMMA : ',';
LBRACE : '{' ; LBRACE : '{';
RBRACE : '}' ; RBRACE : '}';
TILDE : '~' ; TILDE : '~';
EXCLAM : '!' ; EXCLAM : '!';

View File

@@ -1,37 +1,54 @@
package org.lumijiez; package org.lumijiez;
import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.CommonTokenStream; import org.lumijiez.models.Package;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.lumijiez.parser.WinxBaseListener;
import org.lumijiez.parser.WinxLexer; import org.lumijiez.parser.WinxLexer;
import org.lumijiez.parser.WinxParser; import org.lumijiez.parser.WinxParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List;
import java.util.Objects; import java.util.Objects;
public class Main { public class Main {
public static void main(String[] args) throws IOException, URISyntaxException { public static void main(String[] args) {
String input = new String(Files.readAllBytes(Path.of(Objects.requireNonNull(Main.class.getResource("/TestProgram.txt")).toURI()))); try {
// Load the input from a resource file
Path inputPath = Path.of(Objects.requireNonNull(Main.class.getResource("/TestProgram.txt")).toURI());
String input = Files.readString(inputPath);
// Initialize ANTLR components
CharStream inputStream = CharStreams.fromString(input); CharStream inputStream = CharStreams.fromString(input);
WinxLexer lexer = new WinxLexer(inputStream); WinxLexer lexer = new WinxLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer); CommonTokenStream tokenStream = new CommonTokenStream(lexer);
WinxParser parser = new WinxParser(tokenStream); WinxParser parser = new WinxParser(tokenStream);
ParseTreeWalker walker = new ParseTreeWalker(); // Parsing the input
SoftwareReqParseTree listener = new SoftwareReqParseTree(); ParseTree tree = parser.winx();
walker.walk(listener, parser.winx());
// Creating and using the collector to process the parse tree
WinxCollector collector = new WinxCollector();
collector.visit(tree);
// Retrieve the collected data and save it to JSON
List<Package> packages = collector.getPackages();
saveAsJson(packages, "output.json");
System.out.println("Data successfully saved to 'output.json'.");
} catch (IOException | URISyntaxException e) {
System.err.println("Error processing the input file: " + e.getMessage());
}
} }
static class SoftwareReqParseTree extends WinxBaseListener { private static void saveAsJson(List<Package> packages, String filePath) throws IOException {
@Override ObjectMapper mapper = new ObjectMapper();
public void enterWinx(WinxParser.WinxContext ctx) { // Write JSON output to a file with pretty printing
System.out.println("Parsed! \n\n" + ctx.getText()); mapper.writerWithDefaultPrettyPrinter().writeValue(new File(filePath), packages);
}
} }
} }

View File

@@ -0,0 +1,106 @@
package org.lumijiez;
import org.lumijiez.models.*;
import org.lumijiez.models.Package;
import org.lumijiez.parser.WinxBaseVisitor;
import org.lumijiez.parser.WinxParser;
import java.util.ArrayList;
import java.util.List;
public class WinxCollector extends WinxBaseVisitor<Void> {
private final List<Package> packages = new ArrayList<>();
private Package currentPackage;
private Specification currentSpecification;
private Interface currentInterface;
@Override
public Void visitPackage(WinxParser.PackageContext ctx) {
String packageName = ctx.ID().getText();
currentPackage = new Package(packageName);
visitChildren(ctx); // Recursively visit children to fill the package
packages.add(currentPackage);
currentPackage = null; // Reset after finishing this package
return null;
}
@Override
public Void visitInterface(WinxParser.InterfaceContext ctx) {
String interfaceName = ctx.ID().getText();
currentInterface = new Interface(interfaceName);
visitChildren(ctx); // Recursively visit children to fill the interface
currentPackage.addInterface(currentInterface);
currentInterface = null; // Reset after finishing this interface
return null;
}
@Override
public Void visitSpecification(WinxParser.SpecificationContext ctx) {
String specificationName = ctx.ID().getText();
currentSpecification = new Specification(specificationName);
if (ctx.impls() != null) {
currentSpecification.setImplementedInterface(ctx.impls().ID().getText());
}
visitChildren(ctx);
currentPackage.addSpecification(currentSpecification);
currentSpecification = null;
return null;
}
@Override
public Void visitFunction_spec(WinxParser.Function_specContext ctx) {
String functionName = ctx.ID().getText();
FunctionSpec function = new FunctionSpec(functionName);
if (ctx.input_types() != null) {
ctx.input_types().variable().forEach(v -> function.addInputType(new Variable(v.type().getText(), v.ID().getText())));
}
function.addReturnType(new Variable(ctx.function_body().return_type().variable().type().getText(), ctx.function_body().return_type().variable().ID().getText()));
if (ctx.impls() != null) function.setImplemented_interface(ctx.impls().ID().getText());
if (ctx.function_body().specification_entry() != null)
ctx.function_body().specification_entry().forEach(
se -> function.addSpecificationEntry(new SpecificationEntry(se.ID().getText(), se.STRING().getText())));
function.setAccess_modifier(ctx.access_modifiers().getText());
if (currentInterface != null) {
currentInterface.addFunction(function);
} else if (currentSpecification != null) {
currentSpecification.addFunction(function);
}
return visitChildren(ctx);
}
@Override
public Void visitRequirement_spec(WinxParser.Requirement_specContext ctx) {
RequirementSpec requirement = new RequirementSpec(ctx.ID().getText());
ctx.req_specification().forEach(rs -> requirement.addAnnotation(
new Spec(rs.ID(0).getText(), rs.importance().getText())
));
if (currentSpecification != null) {
currentSpecification.addRequirement(requirement);
}
return visitChildren(ctx);
}
@Override
public Void visitResult_specification(WinxParser.Result_specificationContext ctx) {
ResultSpecification result;
if (ctx.importance() != null) {
result = new ResultSpecification(ctx.ID().getText(), ctx.importance().getText());
} else {
result = new ResultSpecification(ctx.ID().getText());
}
if (currentSpecification != null) {
currentSpecification.addResult(result);
}
return visitChildren(ctx);
}
public List<Package> getPackages() {
return packages;
}
}

View File

@@ -0,0 +1,61 @@
package org.lumijiez.models;
import java.util.ArrayList;
import java.util.List;
public class FunctionSpec {
private final String name;
private String access_modifier;
private String implemented_interface = "none";
private final List<Variable> inputTypes = new ArrayList<>();
private final List<Variable> returnTypes = new ArrayList<>();
private final List<SpecificationEntry> specificationEntries = new ArrayList<>();
public FunctionSpec(String name) {
this.name = name;
}
public void addInputType(Variable inputType) {
inputTypes.add(inputType);
}
public void addReturnType(Variable returnType) {
returnTypes.add(returnType);
}
public void addSpecificationEntry(SpecificationEntry entry) {
specificationEntries.add(entry);
}
public String getName() {
return name;
}
public List<Variable> getInputTypes() {
return inputTypes;
}
public List<Variable> getReturnTypes() {
return returnTypes;
}
public List<SpecificationEntry> getSpecificationEntries() {
return specificationEntries;
}
public String getAccess_modifier() {
return access_modifier;
}
public void setAccess_modifier(String access_modifier) {
this.access_modifier = access_modifier;
}
public String getImplemented_interface() {
return implemented_interface;
}
public void setImplemented_interface(String implemented_interface) {
this.implemented_interface = implemented_interface;
}
}

View File

@@ -0,0 +1,25 @@
package org.lumijiez.models;
import java.util.ArrayList;
import java.util.List;
public class Interface {
private final String name;
private final List<FunctionSpec> functions = new ArrayList<>();
public Interface(String name) {
this.name = name;
}
public void addFunction(FunctionSpec function) {
functions.add(function);
}
public String getName() {
return name;
}
public List<FunctionSpec> getFunctions() {
return functions;
}
}

View File

@@ -0,0 +1,34 @@
package org.lumijiez.models;
import java.util.ArrayList;
import java.util.List;
public class Package {
private final String name;
private final List<Interface> interfaces = new ArrayList<>();
private final List<Specification> specifications = new ArrayList<>();
public Package(String name) {
this.name = name;
}
public void addInterface(Interface iface) {
interfaces.add(iface);
}
public void addSpecification(Specification spec) {
specifications.add(spec);
}
public String getName() {
return name;
}
public List<Interface> getInterfaces() {
return interfaces;
}
public List<Specification> getSpecifications() {
return specifications;
}
}

View File

@@ -0,0 +1,26 @@
package org.lumijiez.models;
import java.util.ArrayList;
import java.util.List;
public class RequirementSpec {
private final String name;
private final List<Spec> specs = new ArrayList<>();
public RequirementSpec(String name) {
this.name = name;
}
public void addAnnotation(Spec spec) {
specs.add(spec);
}
public String getName() {
return name;
}
public List<Spec> getAnnotations() {
return specs;
}
}

View File

@@ -0,0 +1,24 @@
package org.lumijiez.models;
public class ResultSpecification {
private final String name;
private final String importance;
public ResultSpecification(String name) {
this.name = name;
this.importance = "none";
}
public ResultSpecification(String name, String importance) {
this.name = name;
this.importance = importance;
}
public String getName() {
return name;
}
public String getImportance() {
return importance;
}
}

View File

@@ -0,0 +1,27 @@
package org.lumijiez.models;
public class Spec {
private String importance;
private String name;
public Spec(String name, String importance) {
this.setImportance(importance);
this.setName(name);
}
public String getImportance() {
return importance;
}
public void setImportance(String importance) {
this.importance = importance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@@ -0,0 +1,51 @@
package org.lumijiez.models;
import java.util.ArrayList;
import java.util.List;
public class Specification {
private final String name;
public String implemented_interface = "none";
private final List<RequirementSpec> requirements = new ArrayList<>();
private final List<ResultSpecification> results = new ArrayList<>();
private final List<FunctionSpec> functions = new ArrayList<>();
public Specification(String name) {
this.name = name;
}
public void addRequirement(RequirementSpec requirement) {
requirements.add(requirement);
}
public void addResult(ResultSpecification result) {
results.add(result);
}
public void addFunction(FunctionSpec function) {
functions.add(function);
}
public String getName() {
return name;
}
public List<RequirementSpec> getRequirements() {
return requirements;
}
public List<ResultSpecification> getResults() {
return results;
}
public List<FunctionSpec> getFunctions() {
return functions;
}
public String getImplementedInterface() {
return implemented_interface;
}
public void setImplementedInterface(String implemented_interface) {
this.implemented_interface = implemented_interface;
}
}

View File

@@ -0,0 +1,19 @@
package org.lumijiez.models;
public class SpecificationEntry {
private final String key;
private final String value;
public SpecificationEntry(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}

View File

@@ -0,0 +1,19 @@
package org.lumijiez.models;
public class Variable {
private final String type;
private final String identifier;
public Variable(String type, String identifier) {
this.type = type;
this.identifier = identifier;
}
public String getType() {
return type;
}
public String getIdentifier() {
return identifier;
}
}

File diff suppressed because one or more lines are too long

View File

@@ -22,12 +22,12 @@ T__20=21
T__21=22 T__21=22
T__22=23 T__22=23
ID=24 ID=24
STRING=25 INT=25
NEWLINE=26 FLOAT=26
COMMENT=27 STRING=27
WS=28 WS=28
INT=29 COMMENT=29
FLOAT=30 LINE_COMMENT=30
LPAREN=31 LPAREN=31
RPAREN=32 RPAREN=32
COLON=33 COLON=33
@@ -43,23 +43,23 @@ EXCLAM=39
'implements'=4 'implements'=4
'@'=5 '@'=5
'result'=6 'result'=6
'AND'=7 'return'=7
'OR'=8 '[]'=8
'return'=9 'critical'=9
'[]'=10 'optional'=10
'critical'=11 'INT'=11
'optional'=12 'FLOAT'=12
'INT'=13 'DOUBLE'=13
'FLOAT'=14 'STRING'=14
'DOUBLE'=15 'BOOLEAN'=15
'STRING'=16 'CHAR'=16
'BOOLEAN'=17 'VOID'=17
'CHAR'=18 'public'=18
'VOID'=19 'protected'=19
'public'=20 'private'=20
'protected'=21 'default'=21
'private'=22 'AND'=22
'default'=23 'OR'=23
'('=31 '('=31
')'=32 ')'=32
':'=33 ':'=33

View File

@@ -24,18 +24,6 @@ public class WinxBaseListener implements WinxListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitWinx(WinxParser.WinxContext ctx) { } @Override public void exitWinx(WinxParser.WinxContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBody(WinxParser.BodyContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBody(WinxParser.BodyContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -48,6 +36,18 @@ public class WinxBaseListener implements WinxListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitPackage(WinxParser.PackageContext ctx) { } @Override public void exitPackage(WinxParser.PackageContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBody(WinxParser.BodyContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBody(WinxParser.BodyContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -72,6 +72,18 @@ public class WinxBaseListener implements WinxListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitSpecification(WinxParser.SpecificationContext ctx) { } @Override public void exitSpecification(WinxParser.SpecificationContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterImpls(WinxParser.ImplsContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitImpls(WinxParser.ImplsContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -120,18 +132,6 @@ public class WinxBaseListener implements WinxListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitResult_specification(WinxParser.Result_specificationContext ctx) { } @Override public void exitResult_specification(WinxParser.Result_specificationContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterLogical_op(WinxParser.Logical_opContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitLogical_op(WinxParser.Logical_opContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -173,13 +173,13 @@ public class WinxBaseListener implements WinxListener {
* *
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void enterReturn_types(WinxParser.Return_typesContext ctx) { } @Override public void enterReturn_type(WinxParser.Return_typeContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitReturn_types(WinxParser.Return_typesContext ctx) { } @Override public void exitReturn_type(WinxParser.Return_typeContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -245,13 +245,13 @@ public class WinxBaseListener implements WinxListener {
* *
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void enterComment(WinxParser.CommentContext ctx) { } @Override public void enterLogical_op(WinxParser.Logical_opContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitComment(WinxParser.CommentContext ctx) { } @Override public void exitLogical_op(WinxParser.Logical_opContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}

View File

@@ -25,14 +25,14 @@ public class WinxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements W
* <p>The default implementation returns the result of calling * <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitBody(WinxParser.BodyContext ctx) { return visitChildren(ctx); } @Override public T visitPackage(WinxParser.PackageContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
* <p>The default implementation returns the result of calling * <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitPackage(WinxParser.PackageContext ctx) { return visitChildren(ctx); } @Override public T visitBody(WinxParser.BodyContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -47,6 +47,13 @@ public class WinxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements W
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitSpecification(WinxParser.SpecificationContext ctx) { return visitChildren(ctx); } @Override public T visitSpecification(WinxParser.SpecificationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitImpls(WinxParser.ImplsContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -75,13 +82,6 @@ public class WinxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements W
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitResult_specification(WinxParser.Result_specificationContext ctx) { return visitChildren(ctx); } @Override public T visitResult_specification(WinxParser.Result_specificationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLogical_op(WinxParser.Logical_opContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -109,7 +109,7 @@ public class WinxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements W
* <p>The default implementation returns the result of calling * <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitReturn_types(WinxParser.Return_typesContext ctx) { return visitChildren(ctx); } @Override public T visitReturn_type(WinxParser.Return_typeContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@@ -151,5 +151,5 @@ public class WinxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements W
* <p>The default implementation returns the result of calling * <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitComment(WinxParser.CommentContext ctx) { return visitChildren(ctx); } @Override public T visitLogical_op(WinxParser.Logical_opContext ctx) { return visitChildren(ctx); }
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,12 +1,13 @@
// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/Winx.g4 by ANTLR 4.13.1 // Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/Winx.g4 by ANTLR 4.13.1
package org.lumijiez.parser; package org.lumijiez.parser;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.ATN; import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.atn.ATNDeserializer;
import org.antlr.v4.runtime.atn.LexerATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"})
public class WinxLexer extends Lexer { public class WinxLexer extends Lexer {
@@ -18,8 +19,8 @@ public class WinxLexer extends Lexer {
public static final int public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, ID=24, STRING=25, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, ID=24, INT=25,
NEWLINE=26, COMMENT=27, WS=28, INT=29, FLOAT=30, LPAREN=31, RPAREN=32, FLOAT=26, STRING=27, WS=28, COMMENT=29, LINE_COMMENT=30, LPAREN=31, RPAREN=32,
COLON=33, SEMICOLON=34, COMMA=35, LBRACE=36, RBRACE=37, TILDE=38, EXCLAM=39; COLON=33, SEMICOLON=34, COMMA=35, LBRACE=36, RBRACE=37, TILDE=38, EXCLAM=39;
public static String[] channelNames = { public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN" "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
@@ -33,8 +34,8 @@ public class WinxLexer extends Lexer {
return new String[] { return new String[] {
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "ID", "STRING", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "ID", "INT", "FLOAT",
"NEWLINE", "COMMENT", "WS", "INT", "FLOAT", "LPAREN", "RPAREN", "COLON", "STRING", "WS", "COMMENT", "LINE_COMMENT", "LPAREN", "RPAREN", "COLON",
"SEMICOLON", "COMMA", "LBRACE", "RBRACE", "TILDE", "EXCLAM" "SEMICOLON", "COMMA", "LBRACE", "RBRACE", "TILDE", "EXCLAM"
}; };
} }
@@ -43,11 +44,11 @@ public class WinxLexer extends Lexer {
private static String[] makeLiteralNames() { private static String[] makeLiteralNames() {
return new String[] { return new String[] {
null, "'package'", "'interface'", "'specification'", "'implements'", null, "'package'", "'interface'", "'specification'", "'implements'",
"'@'", "'result'", "'AND'", "'OR'", "'return'", "'[]'", "'critical'", "'@'", "'result'", "'return'", "'[]'", "'critical'", "'optional'", "'INT'",
"'optional'", "'INT'", "'FLOAT'", "'DOUBLE'", "'STRING'", "'BOOLEAN'", "'FLOAT'", "'DOUBLE'", "'STRING'", "'BOOLEAN'", "'CHAR'", "'VOID'", "'public'",
"'CHAR'", "'VOID'", "'public'", "'protected'", "'private'", "'default'", "'protected'", "'private'", "'default'", "'AND'", "'OR'", null, null,
null, null, null, null, null, null, null, "'('", "')'", "':'", "';'", null, null, null, null, null, "'('", "')'", "':'", "';'", "','", "'{'",
"','", "'{'", "'}'", "'~'", "'!'" "'}'", "'~'", "'!'"
}; };
} }
private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static final String[] _LITERAL_NAMES = makeLiteralNames();
@@ -55,7 +56,7 @@ public class WinxLexer extends Lexer {
return new String[] { return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
"ID", "STRING", "NEWLINE", "COMMENT", "WS", "INT", "FLOAT", "LPAREN", "ID", "INT", "FLOAT", "STRING", "WS", "COMMENT", "LINE_COMMENT", "LPAREN",
"RPAREN", "COLON", "SEMICOLON", "COMMA", "LBRACE", "RBRACE", "TILDE", "RPAREN", "COLON", "SEMICOLON", "COMMA", "LBRACE", "RBRACE", "TILDE",
"EXCLAM" "EXCLAM"
}; };
@@ -119,7 +120,7 @@ public class WinxLexer extends Lexer {
public ATN getATN() { return _ATN; } public ATN getATN() { return _ATN; }
public static final String _serializedATN = public static final String _serializedATN =
"\u0004\u0000\'\u014c\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0004\u0000\'\u0149\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
@@ -140,79 +141,78 @@ public class WinxLexer extends Lexer {
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
"\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005"+ "\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005"+
"\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+
"\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001"+ "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+
"\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001"+ "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
"\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ "\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+
"\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ "\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+
"\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r"+ "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001"+
"\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+ "\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
"\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f"+
"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010"+
"\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ "\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+
"\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+
"\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
"\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ "\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
"\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+
"\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015"+
"\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+
"\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0004\u0017\u00f3\b\u0017\u000b"+ "\u0001\u0017\u0004\u0017\u00f3\b\u0017\u000b\u0017\f\u0017\u00f4\u0001"+
"\u0017\f\u0017\u00f4\u0001\u0018\u0001\u0018\u0005\u0018\u00f9\b\u0018"+ "\u0018\u0004\u0018\u00f8\b\u0018\u000b\u0018\f\u0018\u00f9\u0001\u0019"+
"\n\u0018\f\u0018\u00fc\t\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0004"+ "\u0004\u0019\u00fd\b\u0019\u000b\u0019\f\u0019\u00fe\u0001\u0019\u0001"+
"\u0019\u0101\b\u0019\u000b\u0019\f\u0019\u0102\u0001\u0019\u0001\u0019"+ "\u0019\u0005\u0019\u0103\b\u0019\n\u0019\f\u0019\u0106\t\u0019\u0001\u0019"+
"\u0001\u001a\u0001\u001a\u0005\u001a\u0109\b\u001a\n\u001a\f\u001a\u010c"+ "\u0001\u0019\u0004\u0019\u010a\b\u0019\u000b\u0019\f\u0019\u010b\u0003"+
"\t\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+ "\u0019\u010e\b\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+
"\u001a\u0113\b\u001a\n\u001a\f\u001a\u0116\t\u001a\u0001\u001a\u0003\u001a"+ "\u001a\u0114\b\u001a\n\u001a\f\u001a\u0117\t\u001a\u0001\u001a\u0001\u001a"+
"\u0119\b\u001a\u0001\u001b\u0004\u001b\u011c\b\u001b\u000b\u001b\f\u001b"+ "\u0001\u001b\u0004\u001b\u011c\b\u001b\u000b\u001b\f\u001b\u011d\u0001"+
"\u011d\u0001\u001b\u0001\u001b\u0001\u001c\u0004\u001c\u0123\b\u001c\u000b"+ "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0005\u001c\u0124\b\u001c\n"+
"\u001c\f\u001c\u0124\u0001\u001d\u0004\u001d\u0128\b\u001d\u000b\u001d"+ "\u001c\f\u001c\u0127\t\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+
"\f\u001d\u0129\u0001\u001d\u0001\u001d\u0005\u001d\u012e\b\u001d\n\u001d"+ "\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0131"+
"\f\u001d\u0131\t\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u0135\b\u001d"+ "\b\u001d\n\u001d\f\u001d\u0134\t\u001d\u0001\u001d\u0001\u001d\u0001\u001e"+
"\u000b\u001d\f\u001d\u0136\u0003\u001d\u0139\b\u001d\u0001\u001e\u0001"+ "\u0001\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001"+
"\u001e\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001"+ "\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001"+
"\"\u0001#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001\u010a"+ "\u0125\u0000\'\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+
"\u0000\'\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b"+ "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+
"\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b"+ "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+
"\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016"+ "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+
"-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\""+ "? A!C\"E#G$I%K&M\'\u0001\u0000\u0005\u0002\u0000AZaz\u0001\u000009\u0002"+
"E#G$I%K&M\'\u0001\u0000\u0006\u0002\u0000AZaz\u0001\u0000\"\"\u0002\u0000"+ "\u0000\"\"\\\\\u0003\u0000\t\n\r\r \u0002\u0000\n\n\r\r\u0153\u0000\u0001"+
"\n\n\r\r\u0001\u0000~~\u0003\u0000\t\n\r\r \u0001\u000009\u0157\u0000"+ "\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+
"\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+
"\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+
"\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r"+ "\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ "\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ "\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ "\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d"+ "\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001"+ "\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000"+ "\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001"+
"\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000"+
"\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/"+ "\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000"+ "5\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001"+
"\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000"+
"\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000="+ "\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000"+ "C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001"+
"\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000"+
"\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K"+ "\u0000\u0000M\u0001\u0000\u0000\u0000\u0001O\u0001\u0000\u0000\u0000\u0003"+
"\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0001O\u0001\u0000"+ "W\u0001\u0000\u0000\u0000\u0005a\u0001\u0000\u0000\u0000\u0007o\u0001"+
"\u0000\u0000\u0003W\u0001\u0000\u0000\u0000\u0005a\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\tz\u0001\u0000\u0000\u0000\u000b|\u0001\u0000\u0000"+
"\u0007o\u0001\u0000\u0000\u0000\tz\u0001\u0000\u0000\u0000\u000b|\u0001"+ "\u0000\r\u0083\u0001\u0000\u0000\u0000\u000f\u008a\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\r\u0083\u0001\u0000\u0000\u0000\u000f\u0087\u0001\u0000"+ "\u0011\u008d\u0001\u0000\u0000\u0000\u0013\u0096\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0011\u008a\u0001\u0000\u0000\u0000\u0013\u0091\u0001\u0000"+ "\u0015\u009f\u0001\u0000\u0000\u0000\u0017\u00a3\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0015\u0094\u0001\u0000\u0000\u0000\u0017\u009d\u0001\u0000"+ "\u0019\u00a9\u0001\u0000\u0000\u0000\u001b\u00b0\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0019\u00a6\u0001\u0000\u0000\u0000\u001b\u00aa\u0001\u0000"+ "\u001d\u00b7\u0001\u0000\u0000\u0000\u001f\u00bf\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u001d\u00b0\u0001\u0000\u0000\u0000\u001f\u00b7\u0001\u0000"+ "!\u00c4\u0001\u0000\u0000\u0000#\u00c9\u0001\u0000\u0000\u0000%\u00d0"+
"\u0000\u0000!\u00be\u0001\u0000\u0000\u0000#\u00c6\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000\'\u00da\u0001\u0000\u0000\u0000)\u00e2\u0001"+
"%\u00cb\u0001\u0000\u0000\u0000\'\u00d0\u0001\u0000\u0000\u0000)\u00d7"+ "\u0000\u0000\u0000+\u00ea\u0001\u0000\u0000\u0000-\u00ee\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000+\u00e1\u0001\u0000\u0000\u0000-\u00e9\u0001\u0000"+ "\u0000/\u00f2\u0001\u0000\u0000\u00001\u00f7\u0001\u0000\u0000\u00003"+
"\u0000\u0000/\u00f2\u0001\u0000\u0000\u00001\u00f6\u0001\u0000\u0000\u0000"+ "\u010d\u0001\u0000\u0000\u00005\u010f\u0001\u0000\u0000\u00007\u011b\u0001"+
"3\u0100\u0001\u0000\u0000\u00005\u0118\u0001\u0000\u0000\u00007\u011b"+ "\u0000\u0000\u00009\u0121\u0001\u0000\u0000\u0000;\u012c\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u00009\u0122\u0001\u0000\u0000\u0000;\u0138\u0001\u0000"+ "\u0000=\u0137\u0001\u0000\u0000\u0000?\u0139\u0001\u0000\u0000\u0000A"+
"\u0000\u0000=\u013a\u0001\u0000\u0000\u0000?\u013c\u0001\u0000\u0000\u0000"+ "\u013b\u0001\u0000\u0000\u0000C\u013d\u0001\u0000\u0000\u0000E\u013f\u0001"+
"A\u013e\u0001\u0000\u0000\u0000C\u0140\u0001\u0000\u0000\u0000E\u0142"+ "\u0000\u0000\u0000G\u0141\u0001\u0000\u0000\u0000I\u0143\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000G\u0144\u0001\u0000\u0000\u0000I\u0146\u0001\u0000"+ "\u0000K\u0145\u0001\u0000\u0000\u0000M\u0147\u0001\u0000\u0000\u0000O"+
"\u0000\u0000K\u0148\u0001\u0000\u0000\u0000M\u014a\u0001\u0000\u0000\u0000"+ "P\u0005p\u0000\u0000PQ\u0005a\u0000\u0000QR\u0005c\u0000\u0000RS\u0005"+
"OP\u0005p\u0000\u0000PQ\u0005a\u0000\u0000QR\u0005c\u0000\u0000RS\u0005"+
"k\u0000\u0000ST\u0005a\u0000\u0000TU\u0005g\u0000\u0000UV\u0005e\u0000"+ "k\u0000\u0000ST\u0005a\u0000\u0000TU\u0005g\u0000\u0000UV\u0005e\u0000"+
"\u0000V\u0002\u0001\u0000\u0000\u0000WX\u0005i\u0000\u0000XY\u0005n\u0000"+ "\u0000V\u0002\u0001\u0000\u0000\u0000WX\u0005i\u0000\u0000XY\u0005n\u0000"+
"\u0000YZ\u0005t\u0000\u0000Z[\u0005e\u0000\u0000[\\\u0005r\u0000\u0000"+ "\u0000YZ\u0005t\u0000\u0000Z[\u0005e\u0000\u0000[\\\u0005r\u0000\u0000"+
@@ -228,105 +228,103 @@ public class WinxLexer extends Lexer {
"\u0000\u0000\u0000z{\u0005@\u0000\u0000{\n\u0001\u0000\u0000\u0000|}\u0005"+ "\u0000\u0000\u0000z{\u0005@\u0000\u0000{\n\u0001\u0000\u0000\u0000|}\u0005"+
"r\u0000\u0000}~\u0005e\u0000\u0000~\u007f\u0005s\u0000\u0000\u007f\u0080"+ "r\u0000\u0000}~\u0005e\u0000\u0000~\u007f\u0005s\u0000\u0000\u007f\u0080"+
"\u0005u\u0000\u0000\u0080\u0081\u0005l\u0000\u0000\u0081\u0082\u0005t"+ "\u0005u\u0000\u0000\u0080\u0081\u0005l\u0000\u0000\u0081\u0082\u0005t"+
"\u0000\u0000\u0082\f\u0001\u0000\u0000\u0000\u0083\u0084\u0005A\u0000"+ "\u0000\u0000\u0082\f\u0001\u0000\u0000\u0000\u0083\u0084\u0005r\u0000"+
"\u0000\u0084\u0085\u0005N\u0000\u0000\u0085\u0086\u0005D\u0000\u0000\u0086"+ "\u0000\u0084\u0085\u0005e\u0000\u0000\u0085\u0086\u0005t\u0000\u0000\u0086"+
"\u000e\u0001\u0000\u0000\u0000\u0087\u0088\u0005O\u0000\u0000\u0088\u0089"+ "\u0087\u0005u\u0000\u0000\u0087\u0088\u0005r\u0000\u0000\u0088\u0089\u0005"+
"\u0005R\u0000\u0000\u0089\u0010\u0001\u0000\u0000\u0000\u008a\u008b\u0005"+ "n\u0000\u0000\u0089\u000e\u0001\u0000\u0000\u0000\u008a\u008b\u0005[\u0000"+
"r\u0000\u0000\u008b\u008c\u0005e\u0000\u0000\u008c\u008d\u0005t\u0000"+ "\u0000\u008b\u008c\u0005]\u0000\u0000\u008c\u0010\u0001\u0000\u0000\u0000"+
"\u0000\u008d\u008e\u0005u\u0000\u0000\u008e\u008f\u0005r\u0000\u0000\u008f"+ "\u008d\u008e\u0005c\u0000\u0000\u008e\u008f\u0005r\u0000\u0000\u008f\u0090"+
"\u0090\u0005n\u0000\u0000\u0090\u0012\u0001\u0000\u0000\u0000\u0091\u0092"+ "\u0005i\u0000\u0000\u0090\u0091\u0005t\u0000\u0000\u0091\u0092\u0005i"+
"\u0005[\u0000\u0000\u0092\u0093\u0005]\u0000\u0000\u0093\u0014\u0001\u0000"+ "\u0000\u0000\u0092\u0093\u0005c\u0000\u0000\u0093\u0094\u0005a\u0000\u0000"+
"\u0000\u0000\u0094\u0095\u0005c\u0000\u0000\u0095\u0096\u0005r\u0000\u0000"+ "\u0094\u0095\u0005l\u0000\u0000\u0095\u0012\u0001\u0000\u0000\u0000\u0096"+
"\u0096\u0097\u0005i\u0000\u0000\u0097\u0098\u0005t\u0000\u0000\u0098\u0099"+ "\u0097\u0005o\u0000\u0000\u0097\u0098\u0005p\u0000\u0000\u0098\u0099\u0005"+
"\u0005i\u0000\u0000\u0099\u009a\u0005c\u0000\u0000\u009a\u009b\u0005a"+ "t\u0000\u0000\u0099\u009a\u0005i\u0000\u0000\u009a\u009b\u0005o\u0000"+
"\u0000\u0000\u009b\u009c\u0005l\u0000\u0000\u009c\u0016\u0001\u0000\u0000"+ "\u0000\u009b\u009c\u0005n\u0000\u0000\u009c\u009d\u0005a\u0000\u0000\u009d"+
"\u0000\u009d\u009e\u0005o\u0000\u0000\u009e\u009f\u0005p\u0000\u0000\u009f"+ "\u009e\u0005l\u0000\u0000\u009e\u0014\u0001\u0000\u0000\u0000\u009f\u00a0"+
"\u00a0\u0005t\u0000\u0000\u00a0\u00a1\u0005i\u0000\u0000\u00a1\u00a2\u0005"+ "\u0005I\u0000\u0000\u00a0\u00a1\u0005N\u0000\u0000\u00a1\u00a2\u0005T"+
"o\u0000\u0000\u00a2\u00a3\u0005n\u0000\u0000\u00a3\u00a4\u0005a\u0000"+ "\u0000\u0000\u00a2\u0016\u0001\u0000\u0000\u0000\u00a3\u00a4\u0005F\u0000"+
"\u0000\u00a4\u00a5\u0005l\u0000\u0000\u00a5\u0018\u0001\u0000\u0000\u0000"+ "\u0000\u00a4\u00a5\u0005L\u0000\u0000\u00a5\u00a6\u0005O\u0000\u0000\u00a6"+
"\u00a6\u00a7\u0005I\u0000\u0000\u00a7\u00a8\u0005N\u0000\u0000\u00a8\u00a9"+ "\u00a7\u0005A\u0000\u0000\u00a7\u00a8\u0005T\u0000\u0000\u00a8\u0018\u0001"+
"\u0005T\u0000\u0000\u00a9\u001a\u0001\u0000\u0000\u0000\u00aa\u00ab\u0005"+ "\u0000\u0000\u0000\u00a9\u00aa\u0005D\u0000\u0000\u00aa\u00ab\u0005O\u0000"+
"F\u0000\u0000\u00ab\u00ac\u0005L\u0000\u0000\u00ac\u00ad\u0005O\u0000"+ "\u0000\u00ab\u00ac\u0005U\u0000\u0000\u00ac\u00ad\u0005B\u0000\u0000\u00ad"+
"\u0000\u00ad\u00ae\u0005A\u0000\u0000\u00ae\u00af\u0005T\u0000\u0000\u00af"+ "\u00ae\u0005L\u0000\u0000\u00ae\u00af\u0005E\u0000\u0000\u00af\u001a\u0001"+
"\u001c\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005D\u0000\u0000\u00b1\u00b2"+ "\u0000\u0000\u0000\u00b0\u00b1\u0005S\u0000\u0000\u00b1\u00b2\u0005T\u0000"+
"\u0005O\u0000\u0000\u00b2\u00b3\u0005U\u0000\u0000\u00b3\u00b4\u0005B"+ "\u0000\u00b2\u00b3\u0005R\u0000\u0000\u00b3\u00b4\u0005I\u0000\u0000\u00b4"+
"\u0000\u0000\u00b4\u00b5\u0005L\u0000\u0000\u00b5\u00b6\u0005E\u0000\u0000"+ "\u00b5\u0005N\u0000\u0000\u00b5\u00b6\u0005G\u0000\u0000\u00b6\u001c\u0001"+
"\u00b6\u001e\u0001\u0000\u0000\u0000\u00b7\u00b8\u0005S\u0000\u0000\u00b8"+ "\u0000\u0000\u0000\u00b7\u00b8\u0005B\u0000\u0000\u00b8\u00b9\u0005O\u0000"+
"\u00b9\u0005T\u0000\u0000\u00b9\u00ba\u0005R\u0000\u0000\u00ba\u00bb\u0005"+ "\u0000\u00b9\u00ba\u0005O\u0000\u0000\u00ba\u00bb\u0005L\u0000\u0000\u00bb"+
"I\u0000\u0000\u00bb\u00bc\u0005N\u0000\u0000\u00bc\u00bd\u0005G\u0000"+ "\u00bc\u0005E\u0000\u0000\u00bc\u00bd\u0005A\u0000\u0000\u00bd\u00be\u0005"+
"\u0000\u00bd \u0001\u0000\u0000\u0000\u00be\u00bf\u0005B\u0000\u0000\u00bf"+ "N\u0000\u0000\u00be\u001e\u0001\u0000\u0000\u0000\u00bf\u00c0\u0005C\u0000"+
"\u00c0\u0005O\u0000\u0000\u00c0\u00c1\u0005O\u0000\u0000\u00c1\u00c2\u0005"+ "\u0000\u00c0\u00c1\u0005H\u0000\u0000\u00c1\u00c2\u0005A\u0000\u0000\u00c2"+
"L\u0000\u0000\u00c2\u00c3\u0005E\u0000\u0000\u00c3\u00c4\u0005A\u0000"+ "\u00c3\u0005R\u0000\u0000\u00c3 \u0001\u0000\u0000\u0000\u00c4\u00c5\u0005"+
"\u0000\u00c4\u00c5\u0005N\u0000\u0000\u00c5\"\u0001\u0000\u0000\u0000"+ "V\u0000\u0000\u00c5\u00c6\u0005O\u0000\u0000\u00c6\u00c7\u0005I\u0000"+
"\u00c6\u00c7\u0005C\u0000\u0000\u00c7\u00c8\u0005H\u0000\u0000\u00c8\u00c9"+ "\u0000\u00c7\u00c8\u0005D\u0000\u0000\u00c8\"\u0001\u0000\u0000\u0000"+
"\u0005A\u0000\u0000\u00c9\u00ca\u0005R\u0000\u0000\u00ca$\u0001\u0000"+ "\u00c9\u00ca\u0005p\u0000\u0000\u00ca\u00cb\u0005u\u0000\u0000\u00cb\u00cc"+
"\u0000\u0000\u00cb\u00cc\u0005V\u0000\u0000\u00cc\u00cd\u0005O\u0000\u0000"+ "\u0005b\u0000\u0000\u00cc\u00cd\u0005l\u0000\u0000\u00cd\u00ce\u0005i"+
"\u00cd\u00ce\u0005I\u0000\u0000\u00ce\u00cf\u0005D\u0000\u0000\u00cf&"+ "\u0000\u0000\u00ce\u00cf\u0005c\u0000\u0000\u00cf$\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u00d0\u00d1\u0005p\u0000\u0000\u00d1\u00d2\u0005"+ "\u00d0\u00d1\u0005p\u0000\u0000\u00d1\u00d2\u0005r\u0000\u0000\u00d2\u00d3"+
"u\u0000\u0000\u00d2\u00d3\u0005b\u0000\u0000\u00d3\u00d4\u0005l\u0000"+ "\u0005o\u0000\u0000\u00d3\u00d4\u0005t\u0000\u0000\u00d4\u00d5\u0005e"+
"\u0000\u00d4\u00d5\u0005i\u0000\u0000\u00d5\u00d6\u0005c\u0000\u0000\u00d6"+ "\u0000\u0000\u00d5\u00d6\u0005c\u0000\u0000\u00d6\u00d7\u0005t\u0000\u0000"+
"(\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005p\u0000\u0000\u00d8\u00d9\u0005"+ "\u00d7\u00d8\u0005e\u0000\u0000\u00d8\u00d9\u0005d\u0000\u0000\u00d9&"+
"r\u0000\u0000\u00d9\u00da\u0005o\u0000\u0000\u00da\u00db\u0005t\u0000"+ "\u0001\u0000\u0000\u0000\u00da\u00db\u0005p\u0000\u0000\u00db\u00dc\u0005"+
"\u0000\u00db\u00dc\u0005e\u0000\u0000\u00dc\u00dd\u0005c\u0000\u0000\u00dd"+ "r\u0000\u0000\u00dc\u00dd\u0005i\u0000\u0000\u00dd\u00de\u0005v\u0000"+
"\u00de\u0005t\u0000\u0000\u00de\u00df\u0005e\u0000\u0000\u00df\u00e0\u0005"+ "\u0000\u00de\u00df\u0005a\u0000\u0000\u00df\u00e0\u0005t\u0000\u0000\u00e0"+
"d\u0000\u0000\u00e0*\u0001\u0000\u0000\u0000\u00e1\u00e2\u0005p\u0000"+ "\u00e1\u0005e\u0000\u0000\u00e1(\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005"+
"\u0000\u00e2\u00e3\u0005r\u0000\u0000\u00e3\u00e4\u0005i\u0000\u0000\u00e4"+ "d\u0000\u0000\u00e3\u00e4\u0005e\u0000\u0000\u00e4\u00e5\u0005f\u0000"+
"\u00e5\u0005v\u0000\u0000\u00e5\u00e6\u0005a\u0000\u0000\u00e6\u00e7\u0005"+ "\u0000\u00e5\u00e6\u0005a\u0000\u0000\u00e6\u00e7\u0005u\u0000\u0000\u00e7"+
"t\u0000\u0000\u00e7\u00e8\u0005e\u0000\u0000\u00e8,\u0001\u0000\u0000"+ "\u00e8\u0005l\u0000\u0000\u00e8\u00e9\u0005t\u0000\u0000\u00e9*\u0001"+
"\u0000\u00e9\u00ea\u0005d\u0000\u0000\u00ea\u00eb\u0005e\u0000\u0000\u00eb"+ "\u0000\u0000\u0000\u00ea\u00eb\u0005A\u0000\u0000\u00eb\u00ec\u0005N\u0000"+
"\u00ec\u0005f\u0000\u0000\u00ec\u00ed\u0005a\u0000\u0000\u00ed\u00ee\u0005"+ "\u0000\u00ec\u00ed\u0005D\u0000\u0000\u00ed,\u0001\u0000\u0000\u0000\u00ee"+
"u\u0000\u0000\u00ee\u00ef\u0005l\u0000\u0000\u00ef\u00f0\u0005t\u0000"+ "\u00ef\u0005O\u0000\u0000\u00ef\u00f0\u0005R\u0000\u0000\u00f0.\u0001"+
"\u0000\u00f0.\u0001\u0000\u0000\u0000\u00f1\u00f3\u0007\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u00f1\u00f3\u0007\u0000\u0000\u0000\u00f2\u00f1\u0001"+
"\u00f2\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4\u00f2\u0001"+
"\u00f4\u00f2\u0001\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f50\u0001\u0000"+
"\u00f50\u0001\u0000\u0000\u0000\u00f6\u00fa\u0005\"\u0000\u0000\u00f7"+ "\u0000\u0000\u00f6\u00f8\u0007\u0001\u0000\u0000\u00f7\u00f6\u0001\u0000"+
"\u00f9\b\u0001\u0000\u0000\u00f8\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fc"+ "\u0000\u0000\u00f8\u00f9\u0001\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u00fa\u00f8\u0001\u0000\u0000\u0000\u00fa\u00fb"+ "\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa2\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u00fb\u00fd\u0001\u0000\u0000\u0000\u00fc\u00fa"+ "\u0000\u00fb\u00fd\u0007\u0001\u0000\u0000\u00fc\u00fb\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u00fd\u00fe\u0005\"\u0000\u0000\u00fe2\u0001"+ "\u0000\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe\u00fc\u0001\u0000\u0000"+
"\u0000\u0000\u0000\u00ff\u0101\u0007\u0002\u0000\u0000\u0100\u00ff\u0001"+ "\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff\u0100\u0001\u0000\u0000"+
"\u0000\u0000\u0000\u0101\u0102\u0001\u0000\u0000\u0000\u0102\u0100\u0001"+ "\u0000\u0100\u0104\u0005.\u0000\u0000\u0101\u0103\u0007\u0001\u0000\u0000"+
"\u0000\u0000\u0000\u0102\u0103\u0001\u0000\u0000\u0000\u0103\u0104\u0001"+ "\u0102\u0101\u0001\u0000\u0000\u0000\u0103\u0106\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0104\u0105\u0006\u0019\u0000\u0000\u01054\u0001\u0000"+ "\u0104\u0102\u0001\u0000\u0000\u0000\u0104\u0105\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0106\u010a\u0005~\u0000\u0000\u0107\u0109\b\u0003\u0000"+ "\u0105\u010e\u0001\u0000\u0000\u0000\u0106\u0104\u0001\u0000\u0000\u0000"+
"\u0000\u0108\u0107\u0001\u0000\u0000\u0000\u0109\u010c\u0001\u0000\u0000"+ "\u0107\u0109\u0005.\u0000\u0000\u0108\u010a\u0007\u0001\u0000\u0000\u0109"+
"\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010a\u0108\u0001\u0000\u0000"+ "\u0108\u0001\u0000\u0000\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010b"+
"\u0000\u010b\u010d\u0001\u0000\u0000\u0000\u010c\u010a\u0001\u0000\u0000"+ "\u0109\u0001\u0000\u0000\u0000\u010b\u010c\u0001\u0000\u0000\u0000\u010c"+
"\u0000\u010d\u0119\u0005~\u0000\u0000\u010e\u010f\u0005/\u0000\u0000\u010f"+ "\u010e\u0001\u0000\u0000\u0000\u010d\u00fc\u0001\u0000\u0000\u0000\u010d"+
"\u0110\u0005/\u0000\u0000\u0110\u0114\u0001\u0000\u0000\u0000\u0111\u0113"+ "\u0107\u0001\u0000\u0000\u0000\u010e4\u0001\u0000\u0000\u0000\u010f\u0115"+
"\b\u0002\u0000\u0000\u0112\u0111\u0001\u0000\u0000\u0000\u0113\u0116\u0001"+ "\u0005\"\u0000\u0000\u0110\u0111\u0005\\\u0000\u0000\u0111\u0114\u0007"+
"\u0000\u0000\u0000\u0114\u0112\u0001\u0000\u0000\u0000\u0114\u0115\u0001"+ "\u0002\u0000\u0000\u0112\u0114\b\u0002\u0000\u0000\u0113\u0110\u0001\u0000"+
"\u0000\u0000\u0000\u0115\u0117\u0001\u0000\u0000\u0000\u0116\u0114\u0001"+ "\u0000\u0000\u0113\u0112\u0001\u0000\u0000\u0000\u0114\u0117\u0001\u0000"+
"\u0000\u0000\u0000\u0117\u0119\u00033\u0019\u0000\u0118\u0106\u0001\u0000"+ "\u0000\u0000\u0115\u0113\u0001\u0000\u0000\u0000\u0115\u0116\u0001\u0000"+
"\u0000\u0000\u0118\u010e\u0001\u0000\u0000\u0000\u01196\u0001\u0000\u0000"+ "\u0000\u0000\u0116\u0118\u0001\u0000\u0000\u0000\u0117\u0115\u0001\u0000"+
"\u0000\u011a\u011c\u0007\u0004\u0000\u0000\u011b\u011a\u0001\u0000\u0000"+ "\u0000\u0000\u0118\u0119\u0005\"\u0000\u0000\u01196\u0001\u0000\u0000"+
"\u0000\u011a\u011c\u0007\u0003\u0000\u0000\u011b\u011a\u0001\u0000\u0000"+
"\u0000\u011c\u011d\u0001\u0000\u0000\u0000\u011d\u011b\u0001\u0000\u0000"+ "\u0000\u011c\u011d\u0001\u0000\u0000\u0000\u011d\u011b\u0001\u0000\u0000"+
"\u0000\u011d\u011e\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000"+ "\u0000\u011d\u011e\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000"+
"\u0000\u011f\u0120\u0006\u001b\u0000\u0000\u01208\u0001\u0000\u0000\u0000"+ "\u0000\u011f\u0120\u0006\u001b\u0000\u0000\u01208\u0001\u0000\u0000\u0000"+
"\u0121\u0123\u0007\u0005\u0000\u0000\u0122\u0121\u0001\u0000\u0000\u0000"+ "\u0121\u0125\u0005~\u0000\u0000\u0122\u0124\t\u0000\u0000\u0000\u0123"+
"\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0122\u0001\u0000\u0000\u0000"+ "\u0122\u0001\u0000\u0000\u0000\u0124\u0127\u0001\u0000\u0000\u0000\u0125"+
"\u0124\u0125\u0001\u0000\u0000\u0000\u0125:\u0001\u0000\u0000\u0000\u0126"+ "\u0126\u0001\u0000\u0000\u0000\u0125\u0123\u0001\u0000\u0000\u0000\u0126"+
"\u0128\u0007\u0005\u0000\u0000\u0127\u0126\u0001\u0000\u0000\u0000\u0128"+ "\u0128\u0001\u0000\u0000\u0000\u0127\u0125\u0001\u0000\u0000\u0000\u0128"+
"\u0129\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000\u0000\u0000\u0129"+ "\u0129\u0005~\u0000\u0000\u0129\u012a\u0001\u0000\u0000\u0000\u012a\u012b"+
"\u012a\u0001\u0000\u0000\u0000\u012a\u012b\u0001\u0000\u0000\u0000\u012b"+ "\u0006\u001c\u0001\u0000\u012b:\u0001\u0000\u0000\u0000\u012c\u012d\u0005"+
"\u012f\u0005.\u0000\u0000\u012c\u012e\u0007\u0005\u0000\u0000\u012d\u012c"+ "/\u0000\u0000\u012d\u012e\u0005/\u0000\u0000\u012e\u0132\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u012e\u0131\u0001\u0000\u0000\u0000\u012f\u012d"+ "\u0000\u012f\u0131\b\u0004\u0000\u0000\u0130\u012f\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u012f\u0130\u0001\u0000\u0000\u0000\u0130\u0139"+ "\u0131\u0134\u0001\u0000\u0000\u0000\u0132\u0130\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000\u0132\u0134"+ "\u0132\u0133\u0001\u0000\u0000\u0000\u0133\u0135\u0001\u0000\u0000\u0000"+
"\u0005.\u0000\u0000\u0133\u0135\u0007\u0005\u0000\u0000\u0134\u0133\u0001"+ "\u0134\u0132\u0001\u0000\u0000\u0000\u0135\u0136\u0006\u001d\u0001\u0000"+
"\u0000\u0000\u0000\u0135\u0136\u0001\u0000\u0000\u0000\u0136\u0134\u0001"+ "\u0136<\u0001\u0000\u0000\u0000\u0137\u0138\u0005(\u0000\u0000\u0138>"+
"\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137\u0139\u0001"+ "\u0001\u0000\u0000\u0000\u0139\u013a\u0005)\u0000\u0000\u013a@\u0001\u0000"+
"\u0000\u0000\u0000\u0138\u0127\u0001\u0000\u0000\u0000\u0138\u0132\u0001"+ "\u0000\u0000\u013b\u013c\u0005:\u0000\u0000\u013cB\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0139<\u0001\u0000\u0000\u0000\u013a\u013b\u0005(\u0000"+ "\u013d\u013e\u0005;\u0000\u0000\u013eD\u0001\u0000\u0000\u0000\u013f\u0140"+
"\u0000\u013b>\u0001\u0000\u0000\u0000\u013c\u013d\u0005)\u0000\u0000\u013d"+ "\u0005,\u0000\u0000\u0140F\u0001\u0000\u0000\u0000\u0141\u0142\u0005{"+
"@\u0001\u0000\u0000\u0000\u013e\u013f\u0005:\u0000\u0000\u013fB\u0001"+ "\u0000\u0000\u0142H\u0001\u0000\u0000\u0000\u0143\u0144\u0005}\u0000\u0000"+
"\u0000\u0000\u0000\u0140\u0141\u0005;\u0000\u0000\u0141D\u0001\u0000\u0000"+ "\u0144J\u0001\u0000\u0000\u0000\u0145\u0146\u0005~\u0000\u0000\u0146L"+
"\u0000\u0142\u0143\u0005,\u0000\u0000\u0143F\u0001\u0000\u0000\u0000\u0144"+ "\u0001\u0000\u0000\u0000\u0147\u0148\u0005!\u0000\u0000\u0148N\u0001\u0000"+
"\u0145\u0005{\u0000\u0000\u0145H\u0001\u0000\u0000\u0000\u0146\u0147\u0005"+ "\u0000\u0000\f\u0000\u00f4\u00f9\u00fe\u0104\u010b\u010d\u0113\u0115\u011d"+
"}\u0000\u0000\u0147J\u0001\u0000\u0000\u0000\u0148\u0149\u0005~\u0000"+ "\u0125\u0132\u0002\u0006\u0000\u0000\u0000\u0001\u0000";
"\u0000\u0149L\u0001\u0000\u0000\u0000\u014a\u014b\u0005!\u0000\u0000\u014b"+
"N\u0001\u0000\u0000\u0000\r\u0000\u00f4\u00fa\u0102\u010a\u0114\u0118"+
"\u011d\u0124\u0129\u012f\u0136\u0138\u0001\u0006\u0000\u0000";
public static final ATN _ATN = public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray()); new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static { static {

View File

@@ -22,12 +22,12 @@ T__20=21
T__21=22 T__21=22
T__22=23 T__22=23
ID=24 ID=24
STRING=25 INT=25
NEWLINE=26 FLOAT=26
COMMENT=27 STRING=27
WS=28 WS=28
INT=29 COMMENT=29
FLOAT=30 LINE_COMMENT=30
LPAREN=31 LPAREN=31
RPAREN=32 RPAREN=32
COLON=33 COLON=33
@@ -43,23 +43,23 @@ EXCLAM=39
'implements'=4 'implements'=4
'@'=5 '@'=5
'result'=6 'result'=6
'AND'=7 'return'=7
'OR'=8 '[]'=8
'return'=9 'critical'=9
'[]'=10 'optional'=10
'critical'=11 'INT'=11
'optional'=12 'FLOAT'=12
'INT'=13 'DOUBLE'=13
'FLOAT'=14 'STRING'=14
'DOUBLE'=15 'BOOLEAN'=15
'STRING'=16 'CHAR'=16
'BOOLEAN'=17 'VOID'=17
'CHAR'=18 'public'=18
'VOID'=19 'protected'=19
'public'=20 'private'=20
'protected'=21 'default'=21
'private'=22 'AND'=22
'default'=23 'OR'=23
'('=31 '('=31
')'=32 ')'=32
':'=33 ':'=33

View File

@@ -17,16 +17,6 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitWinx(WinxParser.WinxContext ctx); void exitWinx(WinxParser.WinxContext ctx);
/**
* Enter a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
*/
void enterBody(WinxParser.BodyContext ctx);
/**
* Exit a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
*/
void exitBody(WinxParser.BodyContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#package}. * Enter a parse tree produced by {@link WinxParser#package}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -37,6 +27,16 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitPackage(WinxParser.PackageContext ctx); void exitPackage(WinxParser.PackageContext ctx);
/**
* Enter a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
*/
void enterBody(WinxParser.BodyContext ctx);
/**
* Exit a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
*/
void exitBody(WinxParser.BodyContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#interface}. * Enter a parse tree produced by {@link WinxParser#interface}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -57,6 +57,16 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitSpecification(WinxParser.SpecificationContext ctx); void exitSpecification(WinxParser.SpecificationContext ctx);
/**
* Enter a parse tree produced by {@link WinxParser#impls}.
* @param ctx the parse tree
*/
void enterImpls(WinxParser.ImplsContext ctx);
/**
* Exit a parse tree produced by {@link WinxParser#impls}.
* @param ctx the parse tree
*/
void exitImpls(WinxParser.ImplsContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#spec_body}. * Enter a parse tree produced by {@link WinxParser#spec_body}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -97,16 +107,6 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitResult_specification(WinxParser.Result_specificationContext ctx); void exitResult_specification(WinxParser.Result_specificationContext ctx);
/**
* Enter a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree
*/
void enterLogical_op(WinxParser.Logical_opContext ctx);
/**
* Exit a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree
*/
void exitLogical_op(WinxParser.Logical_opContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#function_spec}. * Enter a parse tree produced by {@link WinxParser#function_spec}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -138,15 +138,15 @@ public interface WinxListener extends ParseTreeListener {
*/ */
void exitInput_types(WinxParser.Input_typesContext ctx); void exitInput_types(WinxParser.Input_typesContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#return_types}. * Enter a parse tree produced by {@link WinxParser#return_type}.
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void enterReturn_types(WinxParser.Return_typesContext ctx); void enterReturn_type(WinxParser.Return_typeContext ctx);
/** /**
* Exit a parse tree produced by {@link WinxParser#return_types}. * Exit a parse tree produced by {@link WinxParser#return_type}.
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitReturn_types(WinxParser.Return_typesContext ctx); void exitReturn_type(WinxParser.Return_typeContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#specification_entry}. * Enter a parse tree produced by {@link WinxParser#specification_entry}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -198,13 +198,13 @@ public interface WinxListener extends ParseTreeListener {
*/ */
void exitAccess_modifiers(WinxParser.Access_modifiersContext ctx); void exitAccess_modifiers(WinxParser.Access_modifiersContext ctx);
/** /**
* Enter a parse tree produced by {@link WinxParser#comment}. * Enter a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void enterComment(WinxParser.CommentContext ctx); void enterLogical_op(WinxParser.Logical_opContext ctx);
/** /**
* Exit a parse tree produced by {@link WinxParser#comment}. * Exit a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitComment(WinxParser.CommentContext ctx); void exitLogical_op(WinxParser.Logical_opContext ctx);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -16,18 +16,18 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result * @return the visitor result
*/ */
T visitWinx(WinxParser.WinxContext ctx); T visitWinx(WinxParser.WinxContext ctx);
/**
* Visit a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBody(WinxParser.BodyContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#package}. * Visit a parse tree produced by {@link WinxParser#package}.
* @param ctx the parse tree * @param ctx the parse tree
* @return the visitor result * @return the visitor result
*/ */
T visitPackage(WinxParser.PackageContext ctx); T visitPackage(WinxParser.PackageContext ctx);
/**
* Visit a parse tree produced by {@link WinxParser#body}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBody(WinxParser.BodyContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#interface}. * Visit a parse tree produced by {@link WinxParser#interface}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -40,6 +40,12 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result * @return the visitor result
*/ */
T visitSpecification(WinxParser.SpecificationContext ctx); T visitSpecification(WinxParser.SpecificationContext ctx);
/**
* Visit a parse tree produced by {@link WinxParser#impls}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitImpls(WinxParser.ImplsContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#spec_body}. * Visit a parse tree produced by {@link WinxParser#spec_body}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -64,12 +70,6 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result * @return the visitor result
*/ */
T visitResult_specification(WinxParser.Result_specificationContext ctx); T visitResult_specification(WinxParser.Result_specificationContext ctx);
/**
* Visit a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLogical_op(WinxParser.Logical_opContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#function_spec}. * Visit a parse tree produced by {@link WinxParser#function_spec}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -89,11 +89,11 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
*/ */
T visitInput_types(WinxParser.Input_typesContext ctx); T visitInput_types(WinxParser.Input_typesContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#return_types}. * Visit a parse tree produced by {@link WinxParser#return_type}.
* @param ctx the parse tree * @param ctx the parse tree
* @return the visitor result * @return the visitor result
*/ */
T visitReturn_types(WinxParser.Return_typesContext ctx); T visitReturn_type(WinxParser.Return_typeContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#specification_entry}. * Visit a parse tree produced by {@link WinxParser#specification_entry}.
* @param ctx the parse tree * @param ctx the parse tree
@@ -125,9 +125,9 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
*/ */
T visitAccess_modifiers(WinxParser.Access_modifiersContext ctx); T visitAccess_modifiers(WinxParser.Access_modifiersContext ctx);
/** /**
* Visit a parse tree produced by {@link WinxParser#comment}. * Visit a parse tree produced by {@link WinxParser#logical_op}.
* @param ctx the parse tree * @param ctx the parse tree
* @return the visitor result * @return the visitor result
*/ */
T visitComment(WinxParser.CommentContext ctx); T visitLogical_op(WinxParser.Logical_opContext ctx);
} }