Please modify the code to implement a parser for the following grammer:
S -> a, B, c
B - > (bb)*, [c]
import sys
tokenindex = -1
token = "abcd"
seen = []
def main():
try:
parser()
except RuntimeError as e:
print(e)
def parser():
advance()
S()
if token != '':
print('Garbage following
-string')
else:
print("Success, it's a valid language.")
def advance():
global tokenindex, token
#move tokenindex to next token
tokenindex += 1
if len(sys.argv) < 2="" or="" tokenindex="">= len(sys.argv[1]):
token = ""
else:
token = sys.argv[1][tokenindex]
seen.append(token)
def S():
A()
C()
def A():
consume('a')
consume('b')
def C():
if token == 'c':
advance()
C()
elif token == 'd':
advance()
else:
raise RuntimeError('Error at index: ' + str(tokenindex) + '. After seeing ' + "".join(seen)[:-1] + ' was expecting c or d')
def consume(expected_token):
if expected_token == token:
advance()
else:
raise RuntimeError('After seeing ' + str(seen) + ' was expecting '+ expected_token + ' but found ' + token)
main()
To Run the code in replit, open 'Shell' and type 'python main.py aabcd' and hit enter. 'aabcd' is an example input string. You could change it with your own.
The given code is the implementation of a simple parser for the following grammar:
S -> AC
A -> ab
C -> cC
C -> d