X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fparsing%2Fparser%2FSCLPostLexer.java;h=efc799322b3d37c4220a90de6f8061154d3ace35;hp=3d3b7b2f512033d90e13119b8edbfa8960cbaafd;hb=cb5fc8d606d8b322563e9345c441eecfa7f01753;hpb=3448b94a8e90047c88eb62a0542c1596acb701b8 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLPostLexer.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLPostLexer.java index 3d3b7b2f5..efc799322 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLPostLexer.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLPostLexer.java @@ -37,6 +37,7 @@ public class SCLPostLexer { NO_SEMICOLON_BEFORE.add(SCLTerminals.EOF); NO_SEMICOLON_BEFORE.add(SCLTerminals.SYMBOL); NO_SEMICOLON_BEFORE.add(SCLTerminals.THEN); + NO_SEMICOLON_BEFORE.add(SCLTerminals.ELSE); NO_SEMICOLON_BEFORE.add(SCLTerminals.IN); NO_SEMICOLON_BEFORE.add(SCLTerminals.RBRACE); NO_SEMICOLON_BEFORE.add(SCLTerminals.RBRACKET); @@ -145,7 +146,7 @@ public class SCLPostLexer { int loc = Locations.endOf(prevToken.location); push(new Token(SCLTerminals.RBRACE, loc, loc, "implicit }")); } - if(indentations.get(indentations.size()-1) == level && symbolId != SCLTerminals.ELSE) + if(indentations.get(indentations.size()-1) == level) push(new Token(SCLTerminals.SEMICOLON, symbolStart, symbolStart, "implicit ;")); } } @@ -175,7 +176,7 @@ public class SCLPostLexer { case SCLTerminals.RBRACE: case SCLTerminals.RPAREN: case SCLTerminals.RBRACKET: - //case SCLTerminals.ELSE: + case SCLTerminals.ELSE: case SCLTerminals.IN: int removedToken = SCLTerminals.EOF; while(!indentations.isEmpty()) { @@ -188,11 +189,15 @@ public class SCLPostLexer { } if(indentations.isEmpty()) throw error(symbolStart, symbolEnd, "No corresponding opening parenthesis for '" + symbol.text + "'."); - if(symbolId == SCLTerminals.THEN && removedToken == SCLTerminals.WHEN) - curToken = symbol = new Token(SCLTerminals.THEN_AFTER_WHEN, symbol.location, symbol.text); + if(symbolId == SCLTerminals.THEN) { + if(removedToken == SCLTerminals.WHEN) + curToken = symbol = new Token(SCLTerminals.THEN_AFTER_WHEN, symbol.location, symbol.text); + else { + indentations.add(-1); + indentationTokens.add(SCLTerminals.THEN); + } + } push(symbol); - //if(symbolId == SCLTerminals.THEN) - // indentations.add(-1); return; case SCLTerminals.EOF: while(indentations.size() > 1 && indentations.get(indentations.size()-1) >= 0) {