考虑的语言( Σ,R,S
),由下式定义
Σ = { ′(′, ′)′ }
R = {S → SS, S → (S), S → ϵ }
1,这是什么语言的语法? 不只是它的生产规则列表,因此R' 如果不是,有什么区别从生产规则列表的语法?
2.如何然后去创造基于此语法自上而下的解析器? 我已经看到了它提到一个堆栈参与。
我有一个标记通过我的教授已经提供,但老实说,我不知道如何去实现为代码(此C++
)。
编辑:包含现在看起来他们是无关的DFA,引用,所以这是有可能的项目描述的误解
语法可以写为:
S =
| '(', S, ')', S
;
我想补充一些伪解析器。 首先,函数访问和操作的TokenStream。
IsEof: Bool // checks for end of token stream
Get: Token // gets next token
Peek: Token // peeks next token without removing it
然后解析器。 S被识别为空的TokenStream,或接着另一S.一个括号集合
Parse_S
// If no tokens left, there is a match.
if (IsEof) return True // OK
// Expect at least one paren set, but possibly more
else return (Peek == '(') && (Parse_ParenSet) && (Parse_S)
的括号集合为S括在括号中。
Parse_ParenSet
// Expect a paren set.
if (IsEof) return False // Error
// Expect an S enclosed in Parenthesis.
else return (Get == '(') && (Parse_S) && (Get == ')')
现在,你应该能够继续进行分配。