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

View File

@@ -1,37 +1,54 @@
package org.lumijiez;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.lumijiez.parser.WinxBaseListener;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.ParseTree;
import org.lumijiez.models.Package;
import org.lumijiez.parser.WinxLexer;
import org.lumijiez.parser.WinxParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Objects;
public class Main {
public static void main(String[] args) throws IOException, URISyntaxException {
String input = new String(Files.readAllBytes(Path.of(Objects.requireNonNull(Main.class.getResource("/TestProgram.txt")).toURI())));
public static void main(String[] args) {
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);
CharStream inputStream = CharStreams.fromString(input);
WinxLexer lexer = new WinxLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
WinxParser parser = new WinxParser(tokenStream);
// Initialize ANTLR components
CharStream inputStream = CharStreams.fromString(input);
WinxLexer lexer = new WinxLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
WinxParser parser = new WinxParser(tokenStream);
ParseTreeWalker walker = new ParseTreeWalker();
SoftwareReqParseTree listener = new SoftwareReqParseTree();
walker.walk(listener, parser.winx());
}
// Parsing the input
ParseTree tree = parser.winx();
static class SoftwareReqParseTree extends WinxBaseListener {
@Override
public void enterWinx(WinxParser.WinxContext ctx) {
System.out.println("Parsed! \n\n" + ctx.getText());
// 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());
}
}
}
private static void saveAsJson(List<Package> packages, String filePath) throws IOException {
ObjectMapper mapper = new ObjectMapper();
// Write JSON output to a file with pretty printing
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__22=23
ID=24
STRING=25
NEWLINE=26
COMMENT=27
INT=25
FLOAT=26
STRING=27
WS=28
INT=29
FLOAT=30
COMMENT=29
LINE_COMMENT=30
LPAREN=31
RPAREN=32
COLON=33
@@ -43,23 +43,23 @@ EXCLAM=39
'implements'=4
'@'=5
'result'=6
'AND'=7
'OR'=8
'return'=9
'[]'=10
'critical'=11
'optional'=12
'INT'=13
'FLOAT'=14
'DOUBLE'=15
'STRING'=16
'BOOLEAN'=17
'CHAR'=18
'VOID'=19
'public'=20
'protected'=21
'private'=22
'default'=23
'return'=7
'[]'=8
'critical'=9
'optional'=10
'INT'=11
'FLOAT'=12
'DOUBLE'=13
'STRING'=14
'BOOLEAN'=15
'CHAR'=16
'VOID'=17
'public'=18
'protected'=19
'private'=20
'default'=21
'AND'=22
'OR'=23
'('=31
')'=32
':'=33

View File

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

View File

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

View File

@@ -17,16 +17,6 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree
*/
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}.
* @param ctx the parse tree
@@ -37,6 +27,16 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree
*/
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}.
* @param ctx the parse tree
@@ -57,6 +57,16 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree
*/
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}.
* @param ctx the parse tree
@@ -97,16 +107,6 @@ public interface WinxListener extends ParseTreeListener {
* @param ctx the parse tree
*/
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}.
* @param ctx the parse tree
@@ -138,15 +138,15 @@ public interface WinxListener extends ParseTreeListener {
*/
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
*/
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
*/
void exitReturn_types(WinxParser.Return_typesContext ctx);
void exitReturn_type(WinxParser.Return_typeContext ctx);
/**
* Enter a parse tree produced by {@link WinxParser#specification_entry}.
* @param ctx the parse tree
@@ -198,13 +198,13 @@ public interface WinxListener extends ParseTreeListener {
*/
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
*/
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
*/
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
*/
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}.
* @param ctx the parse tree
* @return the visitor result
*/
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}.
* @param ctx the parse tree
@@ -40,6 +40,12 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result
*/
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}.
* @param ctx the parse tree
@@ -64,12 +70,6 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result
*/
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}.
* @param ctx the parse tree
@@ -89,11 +89,11 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
*/
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
* @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}.
* @param ctx the parse tree
@@ -125,9 +125,9 @@ public interface WinxVisitor<T> extends ParseTreeVisitor<T> {
*/
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
* @return the visitor result
*/
T visitComment(WinxParser.CommentContext ctx);
T visitLogical_op(WinxParser.Logical_opContext ctx);
}