根据语法为makefile实施解析器

时间:2018-10-17 22:32:56

标签: parsing makefile grammar context-free-grammar context-free-language

我必须为一些不带变量和符号(\ $ @,$ <等)的makefile编写一个解析器,它们包含的都是 R ules:

T 目标: D 倾向

[tab] C 命令

根据Makefile Grammar,Makefile的语法通常是上下文相关的,这使得解析器的实现变得复杂。我试图编写简化版本的语法(如下图所示),但是我不确定它是否正确以及是否与上下文无关。

Fig : Grammar

我没有详细介绍C(命令),因为shell会解析它。

1 个答案:

答案 0 :(得分:1)

在'n','b'和'e'的产生式中,'*'可能意味着它们每个都可以派生出epsilon(空字符串),这是不正确的。 (这意味着D后面可以跟C,而无需换行符或制表符,甚至也没有空格。)

此外,它是模棱两可的,这不一定意味着它对于生成语言是不正确的,但是可能意味着对于构建解析器是不正确的。

  • let session = SessionCipher(store: myStore, remoteAddress: SignalAddress(identifier: sender)) let data = message.base64Decoded() let ciphertext = try CipherTextMessage.init(from: data!) let decrypted = try session.decrypt(ciphertext) 这样的生产意味着T ::= TeT以两种不同方式(等)派生T
  • TeTeT这样的生产意味着从n ::= n*派生的任何内容都可以涉及任意多个n步骤。