Tata bahasa ini dibiarkan rekursif:
Expression ::= AdditionExpression
AdditionExpression ::=
MultiplicationExpression
| AdditionExpression '+' MultiplicationExpression
| AdditionExpression '-' MultiplicationExpression
MultiplicationExpression ::=
Term
| MultiplicationExpression '*' Term
| MultiplicationExpression '/' Term
Term ::=
Number
| '(' AdditionExpression ')'
Number ::=
[+-]?[0-9]+(\.[0-9]+)?
Jadi secara teori, keturunan rekursif tidak akan berhasil. Tetapi dengan mengeksploitasi sifat-sifat tata bahasa yang sesuai dengan masing-masing aturan rekursif-kiri sesuai dengan tingkat presedensi tertentu, dan bahwa melihat-lihat token tunggal sudah cukup untuk memilih produksi yang benar, aturan rekursif kiri dapat secara individual diuraikan dengan sementara loop.
Misalnya, untuk mem-parsing AdditionExpression non-terminal, pseudocode ini mencukupi:
function parse_addition_expression() {
num = parse_multiplication_expression()
while (has_token()) {
get_token()
if (current_token == PLUS)
num += parse_multiplication_expression()
else if (current_token == MINUS)
num -= parse_multiplication_expression()
else {
unget_token()
return num
}
}
return num
}
Apa nama yang tepat untuk tipe parser ini? Artikel informatif ini hanya menyebutnya sebagai "Solusi Klasik": https://www.engr.mun.ca/~theo/Misc/exp_parsing.htm
Harus ada nama yang tepat untuk jenis parser ini.