function productions
nonterminals = ['sp','s','exp','args','keyword']
terminals = ['var','asm','tvar','number','++',$
'--','~','u-','b-','not','(',')',$
'func','^','*','#','##','k/','b/',$
'mod','u+','b+','<','>','eq','ne',$
'le','lt','ge','gt','and',$
'or','xor','&&','||',',','<cr>']
operators = reverse(['^','++','--',$
'*','#','##','k/','b/','mod',$
'u+','u-','b+','b-','<','>','not','~',$
'eq','ne','le','lt','ge','gt',$
'and','or','xor',$
'&&','||'])
precedences = reverse([5,5,5,$
4,4,4,4,4,4,$
3,3,3,3,3,3,3,3,$
2,2,2,2,2,2,$
1,1,1,$
0,0])
n = 46
start = 's'
augment = 'sp'
endline = '<cr>'
empty_sym = 'empty'
production = {type:'production',$
left:'',$
right:strarr(6),$
op:'',$
fun:'',$
index:0,$
length:0 }
left = strarr(n)
left[0] = 'sp'
left[1:2] = 's'
left[3:40] = 'exp'
left[41:44] = 'args'
left[45] = 'keyword'
plist = replicate(production,n)
plist[*].left = left
i = 0
plist[i].right[0] = ['s']
plist[i].length = 1
plist[i].fun = 'mini_return'
i++
plist[i].right[0:2] = ['var','asm','exp']
plist[i].length = 3
plist[i].fun = 'mini_assign'
i++
plist[i].right[0:2] = ['tvar','asm','exp']
plist[i].length = 3
plist[i].fun = 'mini_assign'
i++
plist[i].right[0] = ['number']
plist[i].length = 1
plist[i].fun = 'mini_number'
i++
plist[i].right[0] = ['var']
plist[i].length = 1
plist[i].fun = 'mini_var'
i++
plist[i].right[0] = ['tvar']
plist[i].length = 1
plist[i].fun = 'mini_var'
i++
plist[i].right[0:1] = ['++','var']
plist[i].op = '++'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['++','tvar']
plist[i].op = '++'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['--','var']
plist[i].op = '--'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['--','tvar']
plist[i].op = '--'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['var','++']
plist[i].op = '++'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['tvar','++']
plist[i].op = '++'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['var','--']
plist[i].op = '--'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['tvar','--']
plist[i].op = '--'
plist[i].length = 2
plist[i].fun = 'mini_incdec'
i++
plist[i].right[0:1] = ['~','exp']
plist[i].op = '~'
plist[i].length = 2
plist[i].fun = 'mini_uop'
i++
plist[i].right[0:1] = ['u+','exp']
plist[i].op = 'u+'
plist[i].length = 2
plist[i].fun = 'mini_uop'
i++
plist[i].right[0:1] = ['u-','exp']
plist[i].op = 'u-'
plist[i].length = 2
plist[i].fun = 'mini_uop'
i++
plist[i].right[0:1] = ['not','exp']
plist[i].op = 'not'
plist[i].length = 2
plist[i].fun = 'mini_uop'
i++
plist[i].right[0:2] = ['(','exp',')']
plist[i].length = 3
plist[i].fun = 'mini_paren'
i++
plist[i].right[0:3] = ['func','(','args',')']
plist[i].length = 4
plist[i].fun = 'mini_func'
i++
plist[i].right[0:2] = ['exp','^','exp']
plist[i].op = '^'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','*','exp']
plist[i].op = '*'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','#','exp']
plist[i].op = '#'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','##','exp']
plist[i].op = '##'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','b/','exp']
plist[i].op = 'b/'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','mod','exp']
plist[i].op = 'mod'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','b+','exp']
plist[i].op = 'b+'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','b-','exp']
plist[i].op = 'b-'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','<','exp']
plist[i].op = '<'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','>','exp']
plist[i].op = '>'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','eq','exp']
plist[i].op = 'eq'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','ne','exp']
plist[i].op = 'ne'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','le','exp']
plist[i].op = 'le'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','lt','exp']
plist[i].op = 'lt'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','ge','exp']
plist[i].op = 'ge'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','gt','exp']
plist[i].op = 'gt'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','and','exp']
plist[i].op = 'and'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','or','exp']
plist[i].op = 'or'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','xor','exp']
plist[i].op = 'xor'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','&&','exp']
plist[i].op = '&&'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0:2] = ['exp','||','exp']
plist[i].op = '||'
plist[i].length = 3
plist[i].fun = 'mini_bop'
i++
plist[i].right[0] = ['exp']
plist[i].length = 1
plist[i].fun = 'mini_arg'
i++
plist[i].right[0] = ['keyword']
plist[i].length = 1
plist[i].fun = 'mini_arg'
i++
plist[i].right[0:2] = ['exp',',','args']
plist[i].length = 3
plist[i].fun = 'mini_args'
i++
plist[i].right[0:2] = ['keyword',',','args']
plist[i].length = 3
plist[i].fun = 'mini_args'
i++
plist[i].right[0:1] = ['k/','var']
plist[i].length = 2
plist[i].fun = 'mini_keyword'
i++
plist.index = lindgen(n_elements(plist))
grammar = {type:'grammar',nonterminals:nonterminals,terminals:terminals,operators:operators,precedences:precedences,start:start,augment:augment,endline:endline,empty:empty_sym,production_list:plist}
return,grammar
end