创建基于自定义语言自上而下的解析器(Create a top down parser based o

2019-10-19 07:32发布

考虑的语言( Σ,R,S ),由下式定义

Σ = { ′(′, ′)′ }  
R = {S → SS, S → (S), S → ϵ }

1,这是什么语言的语法? 不只是它的生产规则列表,因此R' 如果不是,有什么区别从生产规则列表的语法?

2.如何然后去创造基于此语法自上而下的解析器? 我已经看到了它提到一个堆栈参与。

我有一个标记通过我的教授已经提供,但老实说,我不知道如何去实现为代码(此C++ )。

编辑:包含现在看起来他们是无关的DFA,引用,所以这是有可能的项目描述的误解

Answer 1:

语法可以写为:

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 == ')')

现在,你应该能够继续进行分配。



文章来源: Create a top down parser based on a custom language