$29
G++ Language Lexer (100 points): Given the description of the G++ language (G++Syntax.pdf) you are asked to implement the lexer that does the tokenization of a given G++ program in a file.
You are expected to submit the file “student_id.cl” with a function called “lexer”. This function should
take a file name and perform lexical analysis of the program contained within this file. The output of
the function should be the tokens in a list. Sample input and output is provided below.
Sample Input:
Sample Output: (There may be mistake(s))
(deffun sumup (x)
(("operator" "(") ("keyword" "deffun")
(if (equal x 0)
("identifier" "sumup") ("operator" "(")
1
("identifier" "x") ("operator" ")") ("operator"
(+ x (sumup (- x 1)))
"(") ("keyword" "if") ("operator" "(") ("keyword"
)
"equal") ("identifier" "x") ("integer" "0")
)
("operator" ")") ("integer" "1") ("operator" "(")
("operator" "+") ("identifier" "x") ("operator"
"(") ("identifier" "sumup") ("operator" "(")
("operator" "-") ("identifier" "x") ("integer" "1")
("operator" ")") ("operator" ")") ("operator" ")")
("operator" ")") ("operator" ")")
Grading: Full score would require the lexer code to implement the proper regular expression or DFA for identifiers as well as integer values. You may not use available Common Lisp code for regular expression finding. 20 points will be taken away for those not implementing a proper DFA or regular expression reader. There are important points regarding to grading. You should be careful about these.
Missing lexer function
The lexer function with less or more arguments
Reading from file
Output format
No output/output not in list
Wrong/missing lexical analysis
Wrong/missing tokenizing
Wrong/missing order of tokens
Syntax/runtime error of any kind (0 points)