将常规语法留给nfa

时间:2016-02-24 17:01:56

标签: parsing grammar finite-automata automata

我可以使用以下算法将正确的常规语法转换为非确定性有限自动机:

inputAlphabet = terminals grammar
states = final + nonTerminals grammar
startState = startSymbol grammar
acceptStates = ["final"]
transitionFunction = relationTable

通过采用语法产生并遵循这些规则来生成关系表

Nonterminal -> empty = Nonterminal (on empty) -> final
Nonterminal -> Terminal = Nonterminal (on Terminal) -> final
Nonterminal1 -> Terminal Nonterminal2 = Nontermal1 (on Terminal) -> Nonterminal2

我将遵循什么算法将左常规语法转换为有限自动机?左线性语法遵循这种风格:

Nonterminal -> empty
Nonterminal -> Terminal
Nonterminal -> Nonterminal Terminal

1 个答案:

答案 0 :(得分:0)

你可以通过从左到右交换非终端的位置将左线性语法转换为右线性语法,然后使用你的算法创建FA,然后反转FA以获得由原始左线性语法生成的语言。