Php 修改基于JSON的语法以允许尾随逗号
所以条令注释是基于JSON的,但由于PHP数组允许挂起逗号,Drupal的人对此已经习以为常,老实说,编辑起来要容易得多Php 修改基于JSON的语法以允许尾随逗号,php,json,doctrine-orm,bnf,Php,Json,Doctrine Orm,Bnf,所以条令注释是基于JSON的,但由于PHP数组允许挂起逗号,Drupal的人对此已经习以为常,老实说,编辑起来要容易得多 ( "foo" => "bar", "foo1" => "bar1", ) 因此,如果bar1后面的逗号丢失,则可以切换行,添加另一行等 所以,我正试图从教义上考虑这一点。维护者声称 通过检查不是“值”的一部分,而是其父项“注释”的标记,可以混合语法规则 他是对的。因此,我们正在寻找更好的语法 Annotation ::= "@" Annotat
(
"foo" => "bar",
"foo1" => "bar1",
)
因此,如果bar1后面的逗号丢失,则可以切换行,添加另一行等
所以,我正试图从教义上考虑这一点。维护者声称
通过检查不是“值”的一部分,而是其父项“注释”的标记,可以混合语法规则
他是对的。因此,我们正在寻找更好的语法
Annotation ::= "@" AnnotationName ["(" [Values] ")"]
Values ::= Array | Value {"," Value}*
如何允许在值中使用尾随逗号?要在末尾添加可选逗号,我们可以使用[]符号:
Annotation ::= "@" AnnotationName ["(" [Values] ")"]
Values ::= Array | Value {"," Value}* [","]
要在末尾添加可选逗号,我们可以使用[]符号:
Annotation ::= "@" AnnotationName ["(" [Values] ")"]
Values ::= Array | Value {"," Value}* [","]
修改后的语法不再是
LL(1)
。因此,由条令实现的简单递归下降解析器需要回溯
在这种情况下,您需要确保::Value()
可以回溯,即触发异常并将解析重置到输入::Value()
之前的位置。捕获此异常并在已有一个有效值后立即在::Values()
中忽略它
这需要能够在lexer中查找,我不知道它有多实用AbstractLexer
有点奇怪
编辑:最简单的方法是将语法保持为LL(1)形式。一种方法是将括号移到值中:
Values ::= "(" [Array | Value {"," Value}* [","] ] ")"
修改后的语法不再是
LL(1)
。因此,由条令实现的简单递归下降解析器需要回溯
在这种情况下,您需要确保::Value()
可以回溯,即触发异常并将解析重置到输入::Value()
之前的位置。捕获此异常并在已有一个有效值后立即在::Values()
中忽略它
这需要能够在lexer中查找,我不知道它有多实用AbstractLexer
有点奇怪
编辑:最简单的方法是将语法保持为LL(1)形式。一种方法是将括号移到值中:
Values ::= "(" [Array | Value {"," Value}* [","] ] ")"