please provide Java code for this project This project will be to write an inter
ID: 3750800 • Letter: P
Question
please provide Java code for this project
This project will be to write an interpreter for a minimal form of Julia. This minimal form of Julia has only 1 data type, integer, and the only identifiers are single letters.
The interpreter will parse a Julia program and build some intermediate data structures. These data structures will then be interpreted to execute the program. All tokens in this language are separated by white space. The parsing algorithm should detect any syntactical or semantic error. The first such error discovered should cause an appropriate error message to be printed, and then the interpreter should terminate. Run-time errors should also be detected with appropriate error messages being printed.
Grammar for the language
Parser
<program> function id ( ) <block> end
<block> <statement> | <statement> <block>
<statement> <if_statement> | <assignment_statement> | <while_statement> | <print_statement> | <for_statement>
<if_statement> if <boolean_expression> <block> else <block> end
<while_statement> while <boolean_expression> <block> end
<assignment_statement> -> id <assignment_operator> <arithmetic_expression>
<for_statement> -> for id = <iter> <block> end
<print_statement> print ( <arithmetic_expression> )
<iter> <arithmetic_expression> : <arithmetic_expression>
<boolean_expression> <relative_op> <arithmetic_expression> <arithmetic_expression>
<relative_op> le_operator | lt_operator | ge_operator | gt_operator | eq_operator | ne_operator
<arithmetic_expression> <id> | <literal_integer> | <binary_expression>
<binary_expression> <arithmetic_op> <arithmetic_expression> <arithmetic_expression>
<arithmetic_op> add_operator | sub_operator | mul_operator | div_operator | mod_operator | exp_operator | rev_div_operator
Lexical Analyzer
id letter
literal_integer digit literal_integer | digit
assignment_operator =
le_operator <=
lt_operator <
ge_operator >=
gt_operator >
eq_operator = =
ne_operator !=
add_operator +
sub_operator -
mul_operator *
div_operator /
mod_operator %
rev_div_operator
exp_operator ^
Explanation / Answer
Given that,
This project consists of developing an interpreter for a minimal form (subset) of the Lua language. This minimal form of Lua has only 1 data type, integer, and the only identifiers are single letters. Lua is not case sensitive. The specification of the grammar is given below.
The interpreter will process a Lua program and build some intermediate data structures. These data structures will then be interpreted to execute the program. All tokens in this language are separated by white space. The parsing algorithm should detect any syntactical or semantic error. The first such error discovered should cause an appropriate error message to be printed, and then the interpreter should terminate. Run-time errors should also be detected with appropriate error messages being printed.
PROGRAM:-
form = Gui.Form{
Text="Ledger Sheet", Width=700, Height=500, StartPosition="CenterScreen",
Gui.SplitContainer {
Dock="Fill", Width=700, SplitterDistance=200,
Gui.TreeView{ Name="treeviewCategory", Dock="Fill", HideSelection=false },
Gui.Panel{
Dock="Fill",
Gui.ListView{
Name="listviewEntries", Dock="Fill", View="Details",
GridLines=true, FullRowSelect=true,
ContextMenuStrip=Gui.ContextMenuStrip {
Gui.ToolStripMenuItem { Text="Delete",
Click=function(sender,e) DeleteEntry() end }
}
},
Gui.StatusStrip { Name="statusStrip", Dock="Bottom" }
}
},
Gui.ToolStrip{
Dock="Top", Top=0, Left=0, Width=700, Height=25,
Gui.ToolStripButton { Name="btnOpen", Text="&Open",
Width=88, Height=22, Image="icon\open.png" },
Gui.ToolStripButton { Name="btnSave", Text="&Save",
Width=88, Height=22, Image="icon\save.png" },
Gui.ToolStripButton { Name="btnAdd", Text="&Add",
Width=88, Height=22, Image="icon\add.png" },
}
}
incomeNode = treeviewCategory.Nodes.Add("Income")
outgoNode = treeviewCategory.Nodes.Add("Outgo")
listviewEntries.Columns.Add(Gui.ColumnHeader{ Text="Date", Width=100 })
listviewEntries.Columns.Add(Gui.ColumnHeader{ Text="Detail", Width=260 })
listviewEntries.Columns.Add(Gui.ColumnHeader{ Text="Amount", Width=120 })
dialog = Gui.Form{
Text="Add Entry", Width=320, Height=220, StartPosition="CenterParent",
FormBorderStyle="FixedDialog", ShowInTaskbar = false;
Gui.Label{ Text="Subject:", Width=60, Height=17, Top=14, Left=12 },
Gui.RadioButton { Name="dialog_Income", Text="Income",
Width=80, Height=20, Top=9, Left=80 },
Gui.RadioButton { Name="dialog_Outgo", Text="Outgo",
Width=80, Height=20, Top=9, Left=160, Checked=true },
Gui.Label{ Text="Category:", Width=60, Height=17, Top=40, Left=12 },
Gui.ComboBox { Name="dialog_Category", Width=160, Height=20, Top=36, Left=80 },
Gui.Label{ Text="Detail:", Width=60, Height=17, Top=68, Left=12 },
Gui.TextBox { Name="dialog_Detail", Width=160, Height=20, Top=64, Left=80 },
Gui.Label{ Text="Amount:", Width=60, Height=17, Top=96, Left=12 },
Gui.TextBox { Name="dialog_Amount", Width=128, Height=20, Top=92, Left=80 },
Gui.Label{ Text="Date:", Width=60, Height=17, Top=128, Left=12 },
Gui.DateTimePicker { Name="dialog_Date", Width=128,
Height=21, Top=124, Left=80, Format="Short" },
Gui.Button{ Text="OK", Name="dialog_btnOK", Width=80,
Height=23, Top=156, Left=130, DialogResult="OK" },
Gui.Button{ Text="Cancel", Name="dialog_btnCancel", Width=80,
Height=23, Top=156, Left=224, DialogResult="Cancel" },
AcceptButton=dialog_btnOK,
CancelButton=dialog_btnCancel
}
Entries = {}
btnAdd.Click = function (sender,e)
dialog_Detail.Text = ""
dialog_Amount.Text = ""
if treeviewCategory.SelectedNode ~= nil and
treeviewCategory.SelectedNode.Tag ~= nil then
dialog_Category.Text = treeviewCategory.SelectedNode.Text
end
if dialog.ShowDialog(form) == "OK" then
local subject = dialog_Income.Checked and "income" or "outgo"
local category = dialog_Category.Text
local detail = dialog_Detail.Text
local amount = dialog_Amount.Text
local date = dialog_Date.Value.ToShortDateString()
local entry = {date, subject, category, detail, amount}
table.insert(Entries, entry)
local categoryNode = UpdateCategoryTree(entry)
if treeviewCategory.SelectedNode == categoryNode then
AddEntryToListView(entry)
else
treeviewCategory.SelectedNode = categoryNode
end
end
end
function FindCategoryNode(entry)
local subject = entry[2]
local category = entry[3]
local subjectNode = subject == "outgo" and outgoNode or incomeNode
local subNodes = subjectNode.Nodes.Find(category, false)
if #subNodes == 0 then
return nil, subjectNode
else
return subNodes[1], subjectNode
end
end
function UpdateCategoryTree(entry)
local categoryNode, subjectNode = FindCategoryNode(entry)
if categoryNode == nil then
local category = entry[3]
categoryNode = subjectNode.Nodes.Add(category, category)
categoryNode.Tag = {}
dialog_Category.Items.Add(category)
end
table.insert(categoryNode.Tag, entry)
return categoryNode
end
treeviewCategory.AfterSelect = function (sender, e)
local entries = treeviewCategory.SelectedNode.Tag
if entries ~= nil then
listviewEntries.Items.Clear()
for _,entry in ipairs(entries) do
AddEntryToListView(entry)
end
end
end
function AddEntryToListView(entry)
local item = Gui.ListViewItem{ Text=entry[1] }
item.SubItems.Add(entry[4])
item.SubItems.Add(entry[5])
item.Tag = entry
listviewEntries.Items.Add(item)
end
function DeleteEntry()
local item = listviewEntries.SelectedItems[1]
local entry = item.Tag
if entry ~= nil then
local categoryNode = FindCategoryNode(entry)
table.removeitem(categoryNode.Tag, entry)
table.removeitem(Entries, entry)
listviewEntries.Items.Remove(item)
end
end
btnSave.Click = function (sender, e)
local sfd = Gui.SaveFileDialog{ Title="Save data", Filter="data file(*.dat)|*.dat" }
if sfd.ShowDialog() == "OK" then
local file = io.open(sfd.FileName, "w")
file:write("Entries = { ")
for _,entry in ipairs(Entries) do
file:write('{"', table.concat(entry, '", "'), '"}, ')
end
file:write('}')
file:close()
end
end
btnOpen.Click = function (sender, e)
local ofd = Gui.OpenFileDialog{ Title="Open data file",
Filter="data file(*.dat)|*.dat" }
if ofd.ShowDialog() == "OK" then
dofile(ofd.FileName)
incomeNode.Nodes.Clear()
outgoNode.Nodes.Clear()
dialog_Category.Items.Clear()
for _,entry in ipairs(Entries) do
UpdateCategoryTree(entry)
end
treeviewCategory.ExpandAll()
listviewEntries.Items.Clear()
end
end
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.