我必须为一些不带变量和符号(\ $ @,$ <等)的makefile编写一个解析器,它们包含的都是 R ules:
T 目标: D 倾向
[tab] C 命令
根据Makefile Grammar,Makefile的语法通常是上下文相关的,这使得解析器的实现变得复杂。我试图编写简化版本的语法(如下图所示),但是我不确定它是否正确以及是否与上下文无关。
我没有详细介绍C(命令),因为shell会解析它。
答案 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
步骤。