An example of writing a grammar and recursive descent parser for summer course

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.

asm-summer.zip

26 june 2018