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...


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




Jun 11, 2022
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here