aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/lexer/ast.h32
-rw-r--r--module-test/lexer_test.cc20
2 files changed, 51 insertions, 1 deletions
diff --git a/include/lexer/ast.h b/include/lexer/ast.h
index ea26d5d..640547f 100644
--- a/include/lexer/ast.h
+++ b/include/lexer/ast.h
@@ -114,6 +114,38 @@ void parse(size_t cmd_begin, size_t cmd_end, size_t ast_vec)
return;
}
+ // left child
+
+ string token_str = symbol_enum2string(token[found_pos].token_type);
+
+ // miss left
+ if (symbol_property[token_str].left == EXIST && cmd_begin == found_pos)
+ {
+ println("parse: missing left child");
+ exit(-1); // TODO
+ }
+
+ // miss right
+ if (symbol_property[token_str].right == EXIST && cmd_end-1 == found_pos)
+ {
+ println("parse: missing right child");
+ exit(-1); // TODO
+ }
+
+ // should not exist left
+ if (symbol_property[token_str].left == NOT_EXIST && cmd_begin != found_pos)
+ {
+ println("parse: left child should NOT exist");
+ exit(-1); // TODO
+ }
+
+ // should not exist right
+ if (symbol_property[token_str].right == NOT_EXIST && cmd_end-1 != found_pos)
+ {
+ println("parse: right child should NOT exist");
+ exit(-1); // TODO
+ }
+
size_t l = alloc_ast();
size_t r = alloc_ast();
ast[ast_vec].left = l;
diff --git a/module-test/lexer_test.cc b/module-test/lexer_test.cc
index def2f57..e99213c 100644
--- a/module-test/lexer_test.cc
+++ b/module-test/lexer_test.cc
@@ -26,7 +26,7 @@ constexpr int MAXLINE = 1024;
int main()
{
- int test_case = 0;
+ int test_case = 13;
string s;
switch (test_case)
@@ -77,6 +77,24 @@ int main()
s = "\'This should be 1 token\' symbol && text \'&&\'";
break;
+ // missing test
+ // missing right
+ case 11:
+ s = "alpha&&";
+ break;
+
+ // missing test
+ // missing left
+ case 12:
+ s = "&&left";
+ break;
+
+ // existance test
+ // exist right
+ case 13:
+ s = "alpha&beta";
+ break;
+
default:
return 0;
}