re-arrange folder
This commit is contained in:
146
src/lang/abstractSyntaxTree.test.ts
Normal file
146
src/lang/abstractSyntaxTree.test.ts
Normal file
@ -0,0 +1,146 @@
|
||||
import { abstractSyntaxTree } from "./abstractSyntaxTree";
|
||||
import { lexer } from "./tokeniser";
|
||||
|
||||
describe("testing AST", () => {
|
||||
test("test 5 + 6", () => {
|
||||
const tokens = lexer("5 +6");
|
||||
const result = abstractSyntaxTree(tokens);
|
||||
expect(result).toEqual({
|
||||
type: "Program",
|
||||
start: 0,
|
||||
end: 4,
|
||||
body: [
|
||||
{
|
||||
type: "ExpressionStatement",
|
||||
start: 0,
|
||||
end: 4,
|
||||
expression: {
|
||||
type: "BinaryExpression",
|
||||
start: 0,
|
||||
end: 4,
|
||||
left: {
|
||||
type: "Literal",
|
||||
start: 0,
|
||||
end: 1,
|
||||
value: 5,
|
||||
raw: "5",
|
||||
},
|
||||
operator: "+",
|
||||
right: {
|
||||
type: "Literal",
|
||||
start: 3,
|
||||
end: 4,
|
||||
value: 6,
|
||||
raw: "6",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
test("test const myVar = 5", () => {
|
||||
const tokens = lexer("const myVar = 5");
|
||||
const { body } = abstractSyntaxTree(tokens);
|
||||
expect(body).toEqual([
|
||||
{
|
||||
type: "VariableDeclaration",
|
||||
start: 0,
|
||||
end: 15,
|
||||
kind: "const",
|
||||
declarations: [
|
||||
{
|
||||
type: "VariableDeclarator",
|
||||
start: 6,
|
||||
end: 15,
|
||||
id: {
|
||||
type: "Identifier",
|
||||
start: 6,
|
||||
end: 11,
|
||||
name: "myVar",
|
||||
},
|
||||
init: {
|
||||
type: "Literal",
|
||||
start: 14,
|
||||
end: 15,
|
||||
value: 5,
|
||||
raw: "5",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
});
|
||||
test("test multi-line", () => {
|
||||
const code = `const myVar = 5
|
||||
const newVar = myVar + 1
|
||||
`;
|
||||
const tokens = lexer(code);
|
||||
const { body } = abstractSyntaxTree(tokens);
|
||||
expect(body).toEqual([
|
||||
{
|
||||
type: "VariableDeclaration",
|
||||
start: 0,
|
||||
end: 15,
|
||||
kind: "const",
|
||||
declarations: [
|
||||
{
|
||||
type: "VariableDeclarator",
|
||||
start: 6,
|
||||
end: 15,
|
||||
id: {
|
||||
type: "Identifier",
|
||||
start: 6,
|
||||
end: 11,
|
||||
name: "myVar",
|
||||
},
|
||||
init: {
|
||||
type: "Literal",
|
||||
start: 14,
|
||||
end: 15,
|
||||
value: 5,
|
||||
raw: "5",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "VariableDeclaration",
|
||||
start: 16,
|
||||
end: 40,
|
||||
kind: "const",
|
||||
declarations: [
|
||||
{
|
||||
type: "VariableDeclarator",
|
||||
start: 22,
|
||||
end: 40,
|
||||
id: {
|
||||
type: "Identifier",
|
||||
start: 22,
|
||||
end: 28,
|
||||
name: "newVar",
|
||||
},
|
||||
init: {
|
||||
type: "BinaryExpression",
|
||||
start: 31,
|
||||
end: 40,
|
||||
left: {
|
||||
type: "Identifier",
|
||||
start: 31,
|
||||
end: 36,
|
||||
name: "myVar",
|
||||
},
|
||||
operator: "+",
|
||||
right: {
|
||||
type: "Literal",
|
||||
start: 39,
|
||||
end: 40,
|
||||
value: 1,
|
||||
raw: "1",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user