Here is an assembly language:
R1 ADD R3
R3 SUB R4
1 SET R5
10 ADD R5
R5 SET R6
20 JMP
1) Write a grammar for this language
asm -> arg asm | EOF
arg -> reg op reg
arg -> num op2
op2 -> op reg
op2 -> JMP
op -> ADD | SUB | SET
2) Write a pseudo code for a parser of this grammar
asm()
if match('EOF')
ret 1
else
arg()
asm()
arg()
if reg()
op()
reg()
ret 1
if num()
op2()
ret 1
ret 0
op2()
if op()
reg()
if match('JMP')
ret 1
ret 0
op()
if match('ADD')
ret 1
if match('SUB')
ret 1
if match('SET')
ret 1
ret 0
reg()
recognise r0..r7
num()
recognise integer
3) Use this language to write an assembly program to do 1+2+3
1 SET R1
2 SET R2
3 SET R3
0 SET R4
R1 ADD R4
R2 ADD R4
R3 ADD R4
Here is the C source code of an actual parser. The parser is in asm.c. You can use a standard C compiler to build it.
26 june 2018