上下文无关文法(context-free gammar):
指文法的前后(上下)没有关系,如文法:
_statement ::= _name is _name's friend.
是上下文无关文法,因为文中出现的两个 name 可以不同(也可以相同,假设自己可以是自己的朋友)。而文法:
_statement ::= _name{0} likes _name{1}, and _name{1} likes _name{0} too.
是上下文相关文法,文中的两个_name{0}必须有同样的扩展,两个_name{1}也必须有同样的扩展。如:tom likes june, and june likes tom too. 即后文中所使用的扩展必须与前文中的扩展相同(或者相关)。同样下文也是上下文相关文法:
_statement ::= _fullname 's last name is _lastname{_lastname must have same extends with _lastname in _fullname}
_fullname ::= _firstname _lastname
_firstname ::= Richard | Tom | Bill
_lastname ::= Stevens | Hanks | Gates
在编译原理中一般把上下文相关的验证放在语义分析中,而不是语法分析。
指文法的前后(上下)没有关系,如文法:
_statement ::= _name is _name's friend.
是上下文无关文法,因为文中出现的两个 name 可以不同(也可以相同,假设自己可以是自己的朋友)。而文法:
_statement ::= _name{0} likes _name{1}, and _name{1} likes _name{0} too.
是上下文相关文法,文中的两个_name{0}必须有同样的扩展,两个_name{1}也必须有同样的扩展。如:tom likes june, and june likes tom too. 即后文中所使用的扩展必须与前文中的扩展相同(或者相关)。同样下文也是上下文相关文法:
_statement ::= _fullname 's last name is _lastname{_lastname must have same extends with _lastname in _fullname}
_fullname ::= _firstname _lastname
_firstname ::= Richard | Tom | Bill
_lastname ::= Stevens | Hanks | Gates
在编译原理中一般把上下文相关的验证放在语义分析中,而不是语法分析。