Изменения

Перейти к: навигация, поиск

Предиктивный синтаксический анализ

1456 байт добавлено, 15:49, 24 мая 2015
Пример
|}
Построим функции обработки некоторых нетерминалов.
E()
res = Node("E")
switch(curToken)
case 'n', '(' :
res.addChild(T())
res.addChild(E'())
break
default :
error("unexpected char")
return res
 
consume(char c)
if (curToken != c)
error("expected" + c)
nextToken()
 
E'()
res = Node("E'")
switch(curToken)
case '+' :
consume('+')
nextToken()
res.addChild(Node("+"))
res.addChild(T())
res.addChild(E'())
break
case '$', ')' :
break
default :
error("unexpected char")
return res
 
F()
res = Node("F")
switch(curToken)
case 'n' :
if (curToken != 'n')
error("expected n")
nextToken()
res.addChild(Node("n"))
break
case '(' :
consume('(')
res.addChild(Node("("))
res.addChild(E())
consume(')')
res.addChild(Node(")"))
default :
error("unexpected char")
return res
 
Функции для T и T' строятся аналогично.
{{TODO | t = Картинки примеров разбора чего-нибудь типа 1+2*3}}
{{TODO | t = Построение таблицы предиктивного анализа}}
Анонимный участник

Навигация