Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有方法指示一个或多个in-PLY';什么是语法?_Python_Grammar_Ply - Fatal编程技术网

Python 是否有方法指示一个或多个in-PLY';什么是语法?

Python 是否有方法指示一个或多个in-PLY';什么是语法?,python,grammar,ply,Python,Grammar,Ply,我想写一条自然的语法规则: program = { expression } 其中,{}表示1个或多个 例如,Lua的语法使用相同的语法: chunk ::= {stat [`;´]} [laststat [`;´]] 这可能吗?这符合上下文无关语法吗?我找到了答案: program : expression | expression NEWLINE expression 我认为最好的简单解决方案是: program : expression | progr

我想写一条自然的语法规则:

program = { expression }
其中,
{}
表示1个或多个

例如,Lua的语法使用相同的语法:

chunk ::= {stat [`;´]} [laststat [`;´]]
这可能吗?这符合上下文无关语法吗?

我找到了答案:

program : expression
        | expression NEWLINE expression

我认为最好的简单解决方案是:

program : expression
        | program NEWLINE expression
这只适用于PLY生成LR语法,在LL语法中,非终结符不能以自身(左递归)开始(如果您使用的是ANTLR之类的工具)

你也可以这样做:

program : expression
        | expression NEWLINE program
第二个版本很好,因为它兼容LL和LR语法,但我相信第一个规则对于LR解析器更有效