Question: I need help integrating a code generator ( outputs a . o object code of the C code read from a txt ) into this
I need help integrating a code generator outputs a o object code of the C code read from a txtinto this lexical, sintaxis and semantic analyzer: import re
import tkinter as tk
from tkinter import filedialog, Text
import pandas as pd
import numpy as np
# Lexical Analyzer
LEXERTABLE pdDataFramecolumnsTOKEN 'IDENTITY' indexrange
def lexercode:
SYMBOLS ;:
SYMBOLS;:
SYMBOLSDUP Open bracket', Close bracket', Semi colon', ;
CommaColon:Single quote', plus
equalgreater
keywords integer 'main', 'while', 'begin', 'end', 'expr',
'Procedure',
If 'elseif', 'else', 'then', 'printf', 'and', or
keywordsdef t 'integer'm 'main'l 'while'b 'begin'd 'end'
e 'expr'soon
p 'Procedure'
xIfz 'elseif'y 'else'f 'then'c 'printf'
& 'and'oro
KEYWORDS SYMBOLS keywords
whitespace
lexeme
tokens
code code.replacet
for i char in enumeratecode:
if char whitespace:
lexeme char
if i lencode:
if codei whitespace or codei in KEYWORDS or lexeme in KEYWORDS:
if lexeme :
tokens.appendlexemereplace
lexeme
j
for i in tokens:
for k in SYMBOLSDUP:
if i k:
LEXERTABLE.atj 'TOKEN' i
LEXERTABLE.atj 'IDENTITY' k
j
break
if i in keywords:
LEXERTABLE.atj 'TOKEN' i
LEXERTABLE.atj 'IDENTITY' 'Keyword'
j
continue
if iisdigit:
LEXERTABLE.atj 'TOKEN' i
LEXERTABLE.atj 'IDENTITY' 'Digit'
j
continue
elif i not in KEYWORDS:
LEXERTABLE.atj 'TOKEN' i
LEXERTABLE.atj 'IDENTITY' 'Identifier'
j
printfLexer Tokens: tokens # Debugging output
return tokens
# Syntax and Semantic Analyzers Simplified Example
EPSILON epsi
grammar
SE
EET
ET
TTF
TF
FE
Fid
def getproductionsX:
productions
for prod in grammar:
lhs rhs prod.split
if lhs X:
rhs rhs
productions.appendjoinlhs rhs
return productions
def closureI:
for production, a in I:
if production.endswith:
continue
lhs rhs production.split
alpha, Bbeta rhssplit
B Bbeta
beta Bbeta:
betaa a
if beta:
betaa betaa
firstbetaa firstbetaa
for b in firstbetaa:
Bproductions getproductionsB
for gamma in Bproductions:
newitem gamma b
if newitem not in I:
I.appendnewitem
return I
def getsymbolsgrammar:
terminals set
nonterminals set
for production in grammar:
lhs rhs production.split
nonterminals.addlhs
for x in rhs:
terminals.addx
terminals terminals.differencenonterminals
terminals.add$
return terminals, nonterminals
def firstsymbols:
finalset set
for X in symbols:
firstset set
if isTerminalX:
finalset.addX
else:
for production in grammar:
lhs rhs production.split
if lhs X:
for i in rangelenrhs:
y rhsi
if y X:
continue
firsty firsty
if EPSILON in firsty:
firsty firstyreplaceEPSILON
firstset.addfirsty
continue
else:
firstset.addfirsty
break
for i in firstset:
if EPSILON not in i:
finalset.addi
else:
i ireplaceEPSILON
finalset.addi
return joinlistfinalset
def isTerminalsymbol:
return symbol in terminals
def shiftdotproduction:
lhs rhs production.split
x y rhssplit
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
