Search in sources :

Example 16 with Token

use of io.github.wysohn.triggerreactor.core.script.Token in project TriggerReactor by wysohn.

the class ParserTest method testIf.

@Test
public void testIf() throws Exception {
    Charset charset = Charset.forName("UTF-8");
    String text = "" + "IF i == 0;" + "    #MESSAGE 0;" + "ELSEIF i == 1;" + "    #MESSAGE 1;" + "ELSEIF i == 2;" + "    #MESSAGE 2;" + "ELSE;" + "    #MESSAGE 3;" + "ENDIF;";
    Lexer lexer = new Lexer(text, charset);
    Parser parser = new Parser(lexer);
    Node root = parser.parse();
    Queue<Node> queue = new LinkedList<Node>();
    serializeNode(queue, root);
    assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "==")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "ELSEIF")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "ELSEIF")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "IF")), queue.poll());
    assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
    assertEquals(0, queue.size());
}
Also used : Lexer(io.github.wysohn.triggerreactor.core.script.lexer.Lexer) Node(io.github.wysohn.triggerreactor.core.script.parser.Node) Charset(java.nio.charset.Charset) Token(io.github.wysohn.triggerreactor.core.script.Token) LinkedList(java.util.LinkedList) Parser(io.github.wysohn.triggerreactor.core.script.parser.Parser) Test(org.junit.Test)

Example 17 with Token

use of io.github.wysohn.triggerreactor.core.script.Token in project TriggerReactor by wysohn.

the class ParserTest method testParse.

@Test
public void testParse() throws IOException, LexerException, ParserException {
    Charset charset = Charset.forName("UTF-8");
    String text = "#MESSAGE (1+(4/2.0)/3*4-(2/(3*-4)) >= 0)\n" + "#MESSAGE \"text\"\n";
    Lexer lexer = new Lexer(text, charset);
    Parser parser = new Parser(lexer);
    Node root = parser.parse();
    Queue<Node> queue = new LinkedList<Node>();
    serializeNode(queue, root);
    assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
    assertEquals(new Node(new Token(Type.DECIMAL, "2.0")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "*")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "+")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "3")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "4")), queue.poll());
    assertEquals(new Node(new Token(Type.UNARYMINUS, "<UNARYMINUS>")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "*")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "/")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "-")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "0")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, ">=")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.STRING, "text")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
    assertEquals(0, queue.size());
}
Also used : Lexer(io.github.wysohn.triggerreactor.core.script.lexer.Lexer) Node(io.github.wysohn.triggerreactor.core.script.parser.Node) Charset(java.nio.charset.Charset) Token(io.github.wysohn.triggerreactor.core.script.Token) LinkedList(java.util.LinkedList) Parser(io.github.wysohn.triggerreactor.core.script.parser.Parser) Test(org.junit.Test)

Example 18 with Token

use of io.github.wysohn.triggerreactor.core.script.Token in project TriggerReactor by wysohn.

the class ParserTest method testNegation.

@Test
public void testNegation() throws Exception {
    Charset charset = Charset.forName("UTF-8");
    String text = "" + "IF !(true && false && true || 2 < 1 && 1 < 2)\n" + "    #MESSAGE \"test i=\"+i\n" + "ENDIF\n";
    Lexer lexer = new Lexer(text, charset);
    Parser parser = new Parser(lexer);
    Node root = parser.parse();
    Queue<Node> queue = new LinkedList<Node>();
    serializeNode(queue, root);
    assertEquals(new Node(new Token(Type.BOOLEAN, "true")), queue.poll());
    assertEquals(new Node(new Token(Type.BOOLEAN, "false")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
    assertEquals(new Node(new Token(Type.BOOLEAN, "true")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "<")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "||")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "1")), queue.poll());
    assertEquals(new Node(new Token(Type.INTEGER, "2")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "<")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "&&")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_L, "!")), queue.poll());
    assertEquals(new Node(new Token(Type.STRING, "test i=")), queue.poll());
    assertEquals(new Node(new Token(Type.THIS, "<This>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "i")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR, ".")), queue.poll());
    assertEquals(new Node(new Token(Type.OPERATOR_A, "+")), queue.poll());
    assertEquals(new Node(new Token(Type.EXECUTOR, "MESSAGE")), queue.poll());
    assertEquals(new Node(new Token(Type.BODY, "<BODY>")), queue.poll());
    assertEquals(new Node(new Token(Type.ID, "IF")), queue.poll());
    assertEquals(new Node(new Token(Type.ROOT, "<ROOT>")), queue.poll());
    assertEquals(0, queue.size());
}
Also used : Lexer(io.github.wysohn.triggerreactor.core.script.lexer.Lexer) Node(io.github.wysohn.triggerreactor.core.script.parser.Node) Charset(java.nio.charset.Charset) Token(io.github.wysohn.triggerreactor.core.script.Token) LinkedList(java.util.LinkedList) Parser(io.github.wysohn.triggerreactor.core.script.parser.Parser) Test(org.junit.Test)

Example 19 with Token

use of io.github.wysohn.triggerreactor.core.script.Token in project TriggerReactor by wysohn.

the class LexerTest method testSemicolon.

@Test
public void testSemicolon() throws Exception {
    Charset charset = Charset.forName("UTF-8");
    String text = "#MESSAGE !true;#MESSAGE \"next\"";
    Lexer lexer = new Lexer(text, charset);
    assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_L, "!"), lexer.getToken());
    assertEquals(new Token(Type.ID, "true"), lexer.getToken());
    assertEquals(new Token(Type.ENDL, null), lexer.getToken());
    assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
    assertEquals(new Token(Type.STRING, "next"), lexer.getToken());
    assertNull(lexer.getToken());
}
Also used : Lexer(io.github.wysohn.triggerreactor.core.script.lexer.Lexer) Charset(java.nio.charset.Charset) Token(io.github.wysohn.triggerreactor.core.script.Token) Test(org.junit.Test)

Example 20 with Token

use of io.github.wysohn.triggerreactor.core.script.Token in project TriggerReactor by wysohn.

the class LexerTest method testGetToken.

@Test
public void testGetToken() throws Exception {
    Charset charset = Charset.forName("UTF-8");
    String text = "#MESSAGE (1+(4/2.0)/3*4-(2/(3*-4)) >= 0)\n" + "#MESSAGE \"text\" \"test\"\n";
    Lexer lexer = new Lexer(text, charset);
    assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, "("), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "1"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "+"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, "("), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "4"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "/"), lexer.getToken());
    assertEquals(new Token(Type.DECIMAL, "2.0"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, ")"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "/"), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "3"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "*"), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "4"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "-"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, "("), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "2"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "/"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, "("), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "3"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "*"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_A, "-"), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "4"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, ")"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, ")"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR_L, ">="), lexer.getToken());
    assertEquals(new Token(Type.INTEGER, "0"), lexer.getToken());
    assertEquals(new Token(Type.OPERATOR, ")"), lexer.getToken());
    assertEquals(new Token(Type.ENDL, null), lexer.getToken());
    assertEquals(new Token(Type.ID, "#MESSAGE"), lexer.getToken());
    assertEquals(new Token(Type.STRING, "text"), lexer.getToken());
    assertEquals(new Token(Type.STRING, "test"), lexer.getToken());
    assertEquals(new Token(Type.ENDL, null), lexer.getToken());
    assertNull(lexer.getToken());
}
Also used : Lexer(io.github.wysohn.triggerreactor.core.script.lexer.Lexer) Charset(java.nio.charset.Charset) Token(io.github.wysohn.triggerreactor.core.script.Token) Test(org.junit.Test)

Aggregations

Token (io.github.wysohn.triggerreactor.core.script.Token)20 Charset (java.nio.charset.Charset)11 Lexer (io.github.wysohn.triggerreactor.core.script.lexer.Lexer)10 Test (org.junit.Test)10 Node (io.github.wysohn.triggerreactor.core.script.parser.Node)7 LinkedList (java.util.LinkedList)7 Parser (io.github.wysohn.triggerreactor.core.script.parser.Parser)6 DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)6 IScriptObject (io.github.wysohn.triggerreactor.core.script.wrapper.IScriptObject)2 Accessor (io.github.wysohn.triggerreactor.core.script.wrapper.Accessor)1 ArrayList (java.util.ArrayList)1 Stack (java.util.Stack)1