[英]Unambiguous Grammar for Regular Expressions
我正在尝试为家庭作业的正则表达式开发一个递归体面的解析器。 我只是想问问社区我开发的语法是否正确,或者我是否走在正确的轨道上:
-= Regex Grammar (EBNF) =-
<start> -> <expr> '\n'
<expr> -> <expr> { '|' <term> } // Union
| <expr> { <expr> } // Concatenation
| <expr> '*' // Closure
| <term>
<term> -> '(' <expr> ')' | <char> // Grouping
| <char>
<char> -> a|b|c| ... |z
一些指导方针:
1. 优先级:按照列出的顺序(从高到低)闭包、串联、并集
2. 结合性:闭包是右结合的; 连接/联合是左关联的
3.必须支持带括号的分组
我的问题:语法(以上)是否符合准则? 我有把握,但我不是 100%,希望一些经验丰富的眼睛能指出一些问题/错误。
TIA 菜鸟
<start>
<expr>
<expr><expr>
<expr><expr><expr>
<term><term><term>
'abc'
这是模棱两可的,因为在第三步中,您可以展开第一个<expr>
或后一个。 您应该可以通过删除来解决这个问题
<expr> -> <expr> { <expr> }
并创建
<term> -> <term> <expr>
反而。
你在这里重复自己
<term> -> '(' <expr> ')' | <char> // Grouping
| <char>
(你有两次<char>
,你的意思是在第一条规则中有它'(' <expr> ')' '|' <char>
吗?)我认为删除它会更清楚
<term> -> '(' <expr> ')'
并创建
<expr> -> '(' <expr> ')'
反而。
然后您还需要在<char>
中的字符周围添加引号。
这是我快速浏览您的 EBNF 所看到的,我已经有一段时间没有自己研究这个了,所以我的一些更正可能是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.