You're using the function textutils.tabulate without parentheses, which are required. It should be
textutils.tabulate(craftables)
As your code is given though, this will not output anything due to the fact that both tables are empty.
Also, though assigning a table to a variable and then inserting it into another table is valid, you can use several other methods that may make your life simpler.
1) table.insert(table, item)
Example:
local craftables = {}
table.insert(craftables, {"This", "Has","Stuff"})
2) table[index] = value
Example:
local craftables = {}
craftables[1] = {"Table", "Within", "A", "Table"}
3) Use the "dot" operator
Example
local craftables = {}
craftables.someTable = {"This","is","for","named","tables"}
4) Directly insert into the table
Example
local craftables = {
[1] = {"Hello!"};
[2] = {"Stuff", "Table"};
}