diff --git a/il65/antlr/il65.g4 b/il65/antlr/il65.g4 index 95658e6fb..23d92159c 100644 --- a/il65/antlr/il65.g4 +++ b/il65/antlr/il65.g4 @@ -31,22 +31,22 @@ module : statement* EOF ; statement : directive + | varinitializer + | vardecl | constdecl | memoryvardecl - | vardecl - | varinitializer | assignment | augassignment ; -directive : '%' singlename (directivearg? | directivearg (',' directivearg)*) ; +directive : '%' identifier (directivearg? | directivearg (',' directivearg)*) ; -directivearg : singlename | integerliteral ; +directivearg : identifier | integerliteral ; -vardecl: datatype arrayspec? singlename ; +vardecl: datatype arrayspec? identifier ; -varinitializer : datatype arrayspec? singlename '=' expression ; +varinitializer : datatype arrayspec? identifier '=' expression ; constdecl: 'const' varinitializer ; @@ -59,40 +59,40 @@ arrayspec: '[' expression (',' expression)? ']' ; assignment : assign_target '=' expression ; augassignment : - assign_target ('+=' | '-=' | '/=' | '//=' | '*=' | '**=' | + assign_target operator=('+=' | '-=' | '/=' | '//=' | '*=' | '**=' | '<<=' | '>>=' | '<<@=' | '>>@=' | '&=' | '|=' | '^=') expression ; assign_target: register - | singlename - | dottedname + | identifier + | scoped_identifier ; expression : - unary_expression - | '(' expression ')' - | expression '**' expression - | expression ('*' | '/' | '//' | '**') expression - | expression ('+' | '-' | '%') expression - | expression ('<<' | '>>' | '<<@' | '>>@' | '&' | '|' | '^') expression - | expression ('and' | 'or' | 'xor') expression - | expression ('==' | '!=' | '<' | '>' | '<=' | '>=') expression + unaryexp = unary_expression + | '(' precedence_expr=expression ')' + | left = expression '**' right = expression + | left = expression ('*' | '/' | '//' | '**') right = expression + | left = expression ('+' | '-' | '%') right = expression + | left = expression ('<<' | '>>' | '<<@' | '>>@' | '&' | '|' | '^') right = expression + | left = expression ('and' | 'or' | 'xor') right = expression + | left = expression ('==' | '!=' | '<' | '>' | '<=' | '>=') right = expression | literalvalue | register - | dottedname - | singlename + | identifier + | scoped_identifier ; unary_expression : - '~' expression - | ('+' | '-') expression - | 'not' expression + operator = '~' expression + | operator = ('+' | '-') expression + | operator = 'not' expression ; -singlename : NAME ; +identifier : NAME ; -dottedname : NAME ('.' NAME)+ ; +scoped_identifier : NAME ('.' NAME)+ ; register : 'A' | 'X' | 'Y' | 'AX' | 'AY' | 'XY' | 'SC' | 'SI' | 'SZ' ; diff --git a/il65/il65.iml b/il65/il65.iml index 4c1895405..32b8529a1 100644 --- a/il65/il65.iml +++ b/il65/il65.iml @@ -4,10 +4,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/il65/src/il65/Main.kt b/il65/src/il65/Main.kt index 1a0f38892..576e2202c 100644 --- a/il65/src/il65/Main.kt +++ b/il65/src/il65/Main.kt @@ -11,8 +11,11 @@ fun main(args: Array) { // println("Reading source file: ${args[0]}") val input = CharStreams.fromString( - "AX //= (5+8)*77\n" + - "X = -3.44e-99") + "byte derp=3" +// + +// "AX //= (5+8)*77\n" + +// "X = -3.44e-99" + ) val lexer = il65Lexer(input) val tokens = CommonTokenStream(lexer) val parser = il65Parser(tokens) diff --git a/il65/src/il65/ast/AST.kt b/il65/src/il65/ast/AST.kt index cd84c9ae1..f6897bf31 100644 --- a/il65/src/il65/ast/AST.kt +++ b/il65/src/il65/ast/AST.kt @@ -61,7 +61,7 @@ data class MemoryVarDecl(override val datatype: DataType, data class Assignment(val target: AssignTarget, val aug_op : String?, val value: IExpression) : IStatement -data class AssignTarget(val register: Register?, val singlename: String?, val dottedname: String?) : Node +data class AssignTarget(val register: Register?, val identifier: String?, val scoped_identifier: String?) : Node interface IExpression: Node @@ -78,42 +78,45 @@ data class LiteralValue(val intvalue: Int?, data class RegisterExpr(val register: Register) : IExpression -data class DottedNameExpr(val dottedname: String) : IExpression - -data class SingleNameExpr(val name: String) : IExpression +data class Identifier(val name: String, val scope: String?) : IExpression fun il65Parser.ModuleContext.toAst() = Module(this.statement().map { it.toAst() }) fun il65Parser.StatementContext.toAst() : IStatement { - val directive = this.directive()?.toAst() - if(directive!=null) return directive - val vardecl = this.vardecl() if(vardecl!=null) { return VarDecl(vardecl.datatype().toAst(), vardecl.arrayspec()?.toAst(), - vardecl.singlename().text, + vardecl.identifier().text, null) } + val varinit = this.varinitializer() + if(varinit!=null) { + return VarDecl(varinit.datatype().toAst(), + varinit.arrayspec()?.toAst(), + varinit.identifier().text, + varinit.expression().toAst()) + } + val constdecl = this.constdecl() if(constdecl!=null) { - val varinit = constdecl.varinitializer() - return ConstDecl(varinit.datatype().toAst(), - varinit.arrayspec()?.toAst(), - varinit.singlename().text, - varinit.expression().toAst()) + val cvarinit = constdecl.varinitializer() + return ConstDecl(cvarinit.datatype().toAst(), + cvarinit.arrayspec()?.toAst(), + cvarinit.identifier().text, + cvarinit.expression().toAst()) } val memdecl = this.memoryvardecl() if(memdecl!=null) { - val varinit = memdecl.varinitializer() - return MemoryVarDecl(varinit.datatype().toAst(), - varinit.arrayspec()?.toAst(), - varinit.singlename().text, - varinit.expression().toAst()) + val mvarinit = memdecl.varinitializer() + return MemoryVarDecl(mvarinit.datatype().toAst(), + mvarinit.arrayspec()?.toAst(), + mvarinit.identifier().text, + mvarinit.expression().toAst()) } val assign = this.assignment() @@ -122,22 +125,24 @@ fun il65Parser.StatementContext.toAst() : IStatement { } val augassign = this.augassignment() - if (augassign!=null) { + if (augassign!=null) return Assignment( - augassign.assign_target().toAst(), - augassign.children[1].text, - augassign.expression().toAst()) - } + augassign.assign_target().toAst(), + augassign.operator.text, + augassign.expression().toAst()) + + val directive = this.directive()?.toAst() + if(directive!=null) return directive throw UnsupportedOperationException(this.text) } fun il65Parser.Assign_targetContext.toAst() = - AssignTarget(this.register()?.toAst(), this.singlename()?.text, this.dottedname()?.text) + AssignTarget(this.register()?.toAst(), this.identifier()?.text, this.scoped_identifier()?.text) -fun il65Parser.RegisterContext.toAst() = Register.valueOf(this.text) +fun il65Parser.RegisterContext.toAst() = Register.valueOf(this.text.toUpperCase()) -fun il65Parser.DatatypeContext.toAst() = DataType.valueOf(this.text) +fun il65Parser.DatatypeContext.toAst() = DataType.valueOf(this.text.toUpperCase()) fun il65Parser.ArrayspecContext.toAst() = ArraySpec( this.expression(0).toAst(), @@ -145,9 +150,9 @@ fun il65Parser.ArrayspecContext.toAst() = ArraySpec( ) -fun il65Parser.DirectiveContext.toAst() = Directive(this.singlename().text, this.directivearg().map { it.toAst() }) +fun il65Parser.DirectiveContext.toAst() = Directive(this.identifier().text, this.directivearg().map { it.toAst() }) -fun il65Parser.DirectiveargContext.toAst() = DirectiveArg(this.singlename()?.text, this.integerliteral()?.toAst()) +fun il65Parser.DirectiveargContext.toAst() = DirectiveArg(this.identifier()?.text, this.integerliteral()?.toAst()) fun il65Parser.IntegerliteralContext.toAst(): Int { val terminal: TerminalNode = this.children[0] as TerminalNode @@ -161,40 +166,33 @@ fun il65Parser.IntegerliteralContext.toAst(): Int { fun il65Parser.ExpressionContext.toAst() : IExpression { - if(this.singlename()!=null) { - return SingleNameExpr(this.singlename().text) - } + if(this.identifier()!=null) + return Identifier(this.identifier().text, null) val litval = this.literalvalue() - if(litval!=null) { + if(litval!=null) return LiteralValue(litval.integerliteral()?.toAst(), - litval.floatliteral()?.toAst(), - litval.stringliteral()?.text, - litval.booleanliteral()?.toAst(), - litval.arrayliteral()?.toAst() - ) - } + litval.floatliteral()?.toAst(), + litval.stringliteral()?.text, + litval.booleanliteral()?.toAst(), + litval.arrayliteral()?.toAst() + ) - if(this.dottedname()!=null) { - return DottedNameExpr(this.dottedname().text) - } + if(this.scoped_identifier()!=null) + return Identifier(this.scoped_identifier().text, "SCOPE????") // todo! - if(this.register()!=null) { + if(this.register()!=null) return RegisterExpr(this.register().toAst()) - } - if(this.unary_expression()!=null) { - return UnaryExpression(this.unary_expression().children[0].text, this.unary_expression().expression().toAst()) - } + if(this.unaryexp!=null) + return UnaryExpression(this.unaryexp.operator.text, this.unaryexp.expression().toAst()) - if(this.expression().size == 2) { - return BinaryExpression(this.expression(0).toAst(), this.text, this.expression(1).toAst()) - } + if(this.left != null && this.right != null) + return BinaryExpression(this.left.toAst(), this.text, this.right.toAst()) - // (....) - if(this.childCount == 3 && this.children[0].text=="(" && this.children[2].text==")") { - return this.expression(0).toAst() - } + // ( expression ) + if(this.precedence_expr!=null) + return this.precedence_expr.toAst() throw UnsupportedOperationException(this.text) } diff --git a/il65/src/il65/parser/il65Parser.java b/il65/src/il65/parser/il65Parser.java index 03970f7ec..3c778f202 100644 --- a/il65/src/il65/parser/il65Parser.java +++ b/il65/src/il65/parser/il65Parser.java @@ -33,13 +33,13 @@ public class il65Parser extends Parser { RULE_vardecl = 4, RULE_varinitializer = 5, RULE_constdecl = 6, RULE_memoryvardecl = 7, RULE_datatype = 8, RULE_arrayspec = 9, RULE_assignment = 10, RULE_augassignment = 11, RULE_assign_target = 12, RULE_expression = 13, RULE_unary_expression = 14, - RULE_singlename = 15, RULE_dottedname = 16, RULE_register = 17, RULE_integerliteral = 18, - RULE_booleanliteral = 19, RULE_arrayliteral = 20, RULE_stringliteral = 21, - RULE_floatliteral = 22, RULE_literalvalue = 23; + RULE_identifier = 15, RULE_scoped_identifier = 16, RULE_register = 17, + RULE_integerliteral = 18, RULE_booleanliteral = 19, RULE_arrayliteral = 20, + RULE_stringliteral = 21, RULE_floatliteral = 22, RULE_literalvalue = 23; public static final String[] ruleNames = { "module", "statement", "directive", "directivearg", "vardecl", "varinitializer", "constdecl", "memoryvardecl", "datatype", "arrayspec", "assignment", "augassignment", - "assign_target", "expression", "unary_expression", "singlename", "dottedname", + "assign_target", "expression", "unary_expression", "identifier", "scoped_identifier", "register", "integerliteral", "booleanliteral", "arrayliteral", "stringliteral", "floatliteral", "literalvalue" }; @@ -166,18 +166,18 @@ public class il65Parser extends Parser { public DirectiveContext directive() { return getRuleContext(DirectiveContext.class,0); } - public ConstdeclContext constdecl() { - return getRuleContext(ConstdeclContext.class,0); - } - public MemoryvardeclContext memoryvardecl() { - return getRuleContext(MemoryvardeclContext.class,0); - } public VardeclContext vardecl() { return getRuleContext(VardeclContext.class,0); } public VarinitializerContext varinitializer() { return getRuleContext(VarinitializerContext.class,0); } + public ConstdeclContext constdecl() { + return getRuleContext(ConstdeclContext.class,0); + } + public MemoryvardeclContext memoryvardecl() { + return getRuleContext(MemoryvardeclContext.class,0); + } public AssignmentContext assignment() { return getRuleContext(AssignmentContext.class,0); } @@ -208,28 +208,28 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 2); { setState(57); - constdecl(); + vardecl(); } break; case 3: enterOuterAlt(_localctx, 3); { setState(58); - memoryvardecl(); + varinitializer(); } break; case 4: enterOuterAlt(_localctx, 4); { setState(59); - vardecl(); + constdecl(); } break; case 5: enterOuterAlt(_localctx, 5); { setState(60); - varinitializer(); + memoryvardecl(); } break; case 6: @@ -260,8 +260,8 @@ public class il65Parser extends Parser { } public static class DirectiveContext extends ParserRuleContext { - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } public List directivearg() { return getRuleContexts(DirectiveargContext.class); @@ -285,7 +285,7 @@ public class il65Parser extends Parser { setState(65); match(T__0); setState(66); - singlename(); + identifier(); setState(78); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { @@ -340,8 +340,8 @@ public class il65Parser extends Parser { } public static class DirectiveargContext extends ParserRuleContext { - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } public IntegerliteralContext integerliteral() { return getRuleContext(IntegerliteralContext.class,0); @@ -363,7 +363,7 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 1); { setState(80); - singlename(); + identifier(); } break; case DEC_INTEGER: @@ -394,8 +394,8 @@ public class il65Parser extends Parser { public DatatypeContext datatype() { return getRuleContext(DatatypeContext.class,0); } - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } public ArrayspecContext arrayspec() { return getRuleContext(ArrayspecContext.class,0); @@ -426,7 +426,7 @@ public class il65Parser extends Parser { } setState(88); - singlename(); + identifier(); } } catch (RecognitionException re) { @@ -444,8 +444,8 @@ public class il65Parser extends Parser { public DatatypeContext datatype() { return getRuleContext(DatatypeContext.class,0); } - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); @@ -479,7 +479,7 @@ public class il65Parser extends Parser { } setState(94); - singlename(); + identifier(); setState(95); match(T__2); setState(96); @@ -690,6 +690,7 @@ public class il65Parser extends Parser { } public static class AugassignmentContext extends ParserRuleContext { + public Token operator; public Assign_targetContext assign_target() { return getRuleContext(Assign_targetContext.class,0); } @@ -712,9 +713,10 @@ public class il65Parser extends Parser { setState(118); assign_target(); setState(119); + ((AugassignmentContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26))) != 0)) ) { - _errHandler.recoverInline(this); + ((AugassignmentContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; @@ -740,11 +742,11 @@ public class il65Parser extends Parser { public RegisterContext register() { return getRuleContext(RegisterContext.class,0); } - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } - public DottednameContext dottedname() { - return getRuleContext(DottednameContext.class,0); + public Scoped_identifierContext scoped_identifier() { + return getRuleContext(Scoped_identifierContext.class,0); } public Assign_targetContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -770,14 +772,14 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 2); { setState(123); - singlename(); + identifier(); } break; case 3: enterOuterAlt(_localctx, 3); { setState(124); - dottedname(); + scoped_identifier(); } break; } @@ -794,6 +796,10 @@ public class il65Parser extends Parser { } public static class ExpressionContext extends ParserRuleContext { + public ExpressionContext left; + public Unary_expressionContext unaryexp; + public ExpressionContext precedence_expr; + public ExpressionContext right; public Unary_expressionContext unary_expression() { return getRuleContext(Unary_expressionContext.class,0); } @@ -809,11 +815,11 @@ public class il65Parser extends Parser { public RegisterContext register() { return getRuleContext(RegisterContext.class,0); } - public DottednameContext dottedname() { - return getRuleContext(DottednameContext.class,0); + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); } - public SinglenameContext singlename() { - return getRuleContext(SinglenameContext.class,0); + public Scoped_identifierContext scoped_identifier() { + return getRuleContext(Scoped_identifierContext.class,0); } public ExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -843,7 +849,7 @@ public class il65Parser extends Parser { case 1: { setState(128); - unary_expression(); + ((ExpressionContext)_localctx).unaryexp = unary_expression(); } break; case 2: @@ -851,7 +857,7 @@ public class il65Parser extends Parser { setState(129); match(T__27); setState(130); - expression(0); + ((ExpressionContext)_localctx).precedence_expr = expression(0); setState(131); match(T__28); } @@ -871,13 +877,13 @@ public class il65Parser extends Parser { case 5: { setState(135); - dottedname(); + identifier(); } break; case 6: { setState(136); - singlename(); + scoped_identifier(); } break; } @@ -896,18 +902,22 @@ public class il65Parser extends Parser { case 1: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(139); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); setState(140); match(T__29); setState(141); - expression(11); + ((ExpressionContext)_localctx).right = expression(11); } break; case 2: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(142); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); @@ -922,12 +932,14 @@ public class il65Parser extends Parser { consume(); } setState(144); - expression(10); + ((ExpressionContext)_localctx).right = expression(10); } break; case 3: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(145); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); @@ -942,12 +954,14 @@ public class il65Parser extends Parser { consume(); } setState(147); - expression(9); + ((ExpressionContext)_localctx).right = expression(9); } break; case 4: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(148); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); @@ -962,12 +976,14 @@ public class il65Parser extends Parser { consume(); } setState(150); - expression(8); + ((ExpressionContext)_localctx).right = expression(8); } break; case 5: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(151); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); @@ -982,12 +998,14 @@ public class il65Parser extends Parser { consume(); } setState(153); - expression(7); + ((ExpressionContext)_localctx).right = expression(7); } break; case 6: { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.left = _prevctx; + _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); setState(154); if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); @@ -1002,7 +1020,7 @@ public class il65Parser extends Parser { consume(); } setState(156); - expression(6); + ((ExpressionContext)_localctx).right = expression(6); } break; } @@ -1026,6 +1044,7 @@ public class il65Parser extends Parser { } public static class Unary_expressionContext extends ParserRuleContext { + public Token operator; public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } @@ -1047,7 +1066,7 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 1); { setState(162); - match(T__51); + ((Unary_expressionContext)_localctx).operator = match(T__51); setState(163); expression(0); } @@ -1057,9 +1076,10 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 2); { setState(164); + ((Unary_expressionContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__33 || _la==T__34) ) { - _errHandler.recoverInline(this); + ((Unary_expressionContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { if ( _input.LA(1)==Token.EOF ) matchedEOF = true; @@ -1074,7 +1094,7 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 3); { setState(166); - match(T__52); + ((Unary_expressionContext)_localctx).operator = match(T__52); setState(167); expression(0); } @@ -1094,17 +1114,17 @@ public class il65Parser extends Parser { return _localctx; } - public static class SinglenameContext extends ParserRuleContext { + public static class IdentifierContext extends ParserRuleContext { public TerminalNode NAME() { return getToken(il65Parser.NAME, 0); } - public SinglenameContext(ParserRuleContext parent, int invokingState) { + public IdentifierContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_singlename; } + @Override public int getRuleIndex() { return RULE_identifier; } } - public final SinglenameContext singlename() throws RecognitionException { - SinglenameContext _localctx = new SinglenameContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_singlename); + public final IdentifierContext identifier() throws RecognitionException { + IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_identifier); try { enterOuterAlt(_localctx, 1); { @@ -1123,20 +1143,20 @@ public class il65Parser extends Parser { return _localctx; } - public static class DottednameContext extends ParserRuleContext { + public static class Scoped_identifierContext extends ParserRuleContext { public List NAME() { return getTokens(il65Parser.NAME); } public TerminalNode NAME(int i) { return getToken(il65Parser.NAME, i); } - public DottednameContext(ParserRuleContext parent, int invokingState) { + public Scoped_identifierContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_dottedname; } + @Override public int getRuleIndex() { return RULE_scoped_identifier; } } - public final DottednameContext dottedname() throws RecognitionException { - DottednameContext _localctx = new DottednameContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_dottedname); + public final Scoped_identifierContext scoped_identifier() throws RecognitionException { + Scoped_identifierContext _localctx = new Scoped_identifierContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_scoped_identifier); try { int _alt; enterOuterAlt(_localctx, 1); @@ -1537,11 +1557,11 @@ public class il65Parser extends Parser { "\3\2\2\2$\u00b5\3\2\2\2&\u00b7\3\2\2\2(\u00b9\3\2\2\2*\u00bb\3\2\2\2,"+ "\u00c6\3\2\2\2.\u00c8\3\2\2\2\60\u00cf\3\2\2\2\62\64\5\4\3\2\63\62\3\2"+ "\2\2\64\67\3\2\2\2\65\63\3\2\2\2\65\66\3\2\2\2\668\3\2\2\2\67\65\3\2\2"+ - "\289\7\2\2\39\3\3\2\2\2:B\5\6\4\2;B\5\16\b\2B\5"+ - "\f\7\2?B\5\26\f\2@B\5\30\r\2A:\3\2\2\2A;\3\2\2\2A<\3\2\2\2A=\3\2\2\2A"+ - ">\3\2\2\2A?\3\2\2\2A@\3\2\2\2B\5\3\2\2\2CD\7\3\2\2DP\5 \21\2EG\5\b\5\2"+ - "FE\3\2\2\2FG\3\2\2\2GQ\3\2\2\2HM\5\b\5\2IJ\7\4\2\2JL\5\b\5\2KI\3\2\2\2"+ - "LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2NQ\3\2\2\2OM\3\2\2\2PF\3\2\2\2PH\3\2\2\2"+ + "\289\7\2\2\39\3\3\2\2\2:B\5\6\4\2;B\5\n\6\2B\5\20"+ + "\t\2?B\5\26\f\2@B\5\30\r\2A:\3\2\2\2A;\3\2\2\2A<\3\2\2\2A=\3\2\2\2A>\3"+ + "\2\2\2A?\3\2\2\2A@\3\2\2\2B\5\3\2\2\2CD\7\3\2\2DP\5 \21\2EG\5\b\5\2FE"+ + "\3\2\2\2FG\3\2\2\2GQ\3\2\2\2HM\5\b\5\2IJ\7\4\2\2JL\5\b\5\2KI\3\2\2\2L"+ + "O\3\2\2\2MK\3\2\2\2MN\3\2\2\2NQ\3\2\2\2OM\3\2\2\2PF\3\2\2\2PH\3\2\2\2"+ "Q\7\3\2\2\2RU\5 \21\2SU\5&\24\2TR\3\2\2\2TS\3\2\2\2U\t\3\2\2\2VX\5\22"+ "\n\2WY\5\24\13\2XW\3\2\2\2XY\3\2\2\2YZ\3\2\2\2Z[\5 \21\2[\13\3\2\2\2\\"+ "^\5\22\n\2]_\5\24\13\2^]\3\2\2\2^_\3\2\2\2_`\3\2\2\2`a\5 \21\2ab\7\5\2"+ @@ -1553,7 +1573,7 @@ public class il65Parser extends Parser { "\177|\3\2\2\2\177}\3\2\2\2\177~\3\2\2\2\u0080\33\3\2\2\2\u0081\u0082\b"+ "\17\1\2\u0082\u008c\5\36\20\2\u0083\u0084\7\36\2\2\u0084\u0085\5\34\17"+ "\2\u0085\u0086\7\37\2\2\u0086\u008c\3\2\2\2\u0087\u008c\5\60\31\2\u0088"+ - "\u008c\5$\23\2\u0089\u008c\5\"\22\2\u008a\u008c\5 \21\2\u008b\u0081\3"+ + "\u008c\5$\23\2\u0089\u008c\5 \21\2\u008a\u008c\5\"\22\2\u008b\u0081\3"+ "\2\2\2\u008b\u0083\3\2\2\2\u008b\u0087\3\2\2\2\u008b\u0088\3\2\2\2\u008b"+ "\u0089\3\2\2\2\u008b\u008a\3\2\2\2\u008c\u00a1\3\2\2\2\u008d\u008e\f\f"+ "\2\2\u008e\u008f\7 \2\2\u008f\u00a0\5\34\17\r\u0090\u0091\f\13\2\2\u0091"+ diff --git a/il65/test/UnitTests.kt b/il65/test/UnitTests.kt new file mode 100644 index 000000000..71ac25419 --- /dev/null +++ b/il65/test/UnitTests.kt @@ -0,0 +1,21 @@ + +package demo + +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.equalTo +import org.hamcrest.CoreMatchers.`is` as Is +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class TestSource() { + @Test + fun f() { + assertThat(2, Is(equalTo(2))) + } + + @Test + fun f2() { + assertThat(2, Is(equalTo(3))) + } +}