use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class ASMExpression method processOperator.
protected void processOperator(Stack<Token> stack, List<Token> result, OperatorExprToken current) {
List<Token> list = new ArrayList<Token>();
boolean isRightOperator = current != null && current.isRightSide();
int prior = current == null ? -1 : current.getPriority();
while (!stack.empty()) {
Token el = stack.peek();
int elPrior = getPriority(el);
if (el instanceof BraceExprToken)
break;
if (current != null && current.getAssociation() == Association.RIGHT && !current.isBinary() && prev instanceof OperatorExprToken)
break;
boolean flush = current == null || elPrior == 1 || (isRightOperator ? elPrior > prior : elPrior <= prior);
if (flush) {
stack.pop();
list.add(el);
} else {
break;
}
}
result.addAll(list);
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class SourceTokenizer method parseAll.
@Signature
public static List<SourceToken> parseAll(Environment env, String text) {
Tokenizer tokenizer = new Tokenizer(text, new Context(text));
Token token;
List<SourceToken> result = new ArrayList<>();
try {
while ((token = tokenizer.nextToken()) != null) {
result.add(new SourceToken(env, token));
}
} catch (ParseException | StringIndexOutOfBoundsException e) {
// TODO remove StringIndexOutOfBoundsException bug in jphp!
return null;
}
return result;
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class IfSyntaxTest method testShortly.
@Test
public void testShortly() {
List<Token> tree = getSyntaxTree("if (true) 'string'; 123;");
Assert.assertTrue(tree.size() == 2);
Assert.assertTrue(tree.get(0) instanceof ExprStmtToken);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().size() == 1);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().get(0) instanceof IfStmtToken);
IfStmtToken token = (IfStmtToken) ((ExprStmtToken) tree.get(0)).getTokens().get(0);
Assert.assertNotNull(token.getBody());
Assert.assertNotNull(token.getCondition());
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class IfSyntaxTest method testAlternative.
@Test
public void testAlternative() {
List<Token> tree = getSyntaxTree("if (true): 123; endif");
Assert.assertTrue(tree.size() == 1);
Assert.assertTrue(tree.get(0) instanceof ExprStmtToken);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().size() == 1);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().get(0) instanceof IfStmtToken);
IfStmtToken token = (IfStmtToken) ((ExprStmtToken) tree.get(0)).getTokens().get(0);
Assert.assertNotNull(token.getBody());
Assert.assertNotNull(token.getCondition());
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class IfSyntaxTest method testNested.
@Test
public void testNested() {
List<Token> tree = getSyntaxTree("if (true){ " + "'string'; " + "if(false){ " + "1234; " + "} " + "}");
Assert.assertTrue(tree.size() == 1);
Assert.assertTrue(tree.get(0) instanceof ExprStmtToken);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().size() == 1);
Assert.assertTrue(((ExprStmtToken) tree.get(0)).getTokens().get(0) instanceof IfStmtToken);
IfStmtToken token = (IfStmtToken) ((ExprStmtToken) tree.get(0)).getTokens().get(0);
Assert.assertNotNull(token.getBody());
Assert.assertTrue(token.getBody().getInstructions().size() == 2);
Assert.assertTrue(token.getBody().getInstructions().get(1).getTokens().size() == 1);
Assert.assertTrue(token.getBody().getInstructions().get(1).getTokens().get(0) instanceof IfStmtToken);
}
Aggregations