【发布时间】:2011-03-03 18:06:22
【问题描述】:
这是一个特定于 parboiled 解析器框架和一般 BNF/PEG 的问题。
假设我有一个相当简单的正则表达式
^\\s*([A-Za-z_][A-Za-z_0-9]*)\\s*=\\s*(\\S+)\\s*$
代表伪EBNF的
<line> ::= <ws>? <identifier> <ws>? '=' <nonwhitespace> <ws>?
<ws> ::= (' ' | '\t' | {other whitespace characters})+
<identifier> ::= <identifier-head> <identifier-tail>
<identifier-head> ::= <letter> | '_'
<identifier-tail> ::= (<letter> | <digit> | '_')*
<letter> ::= ('A'..'Z') | ('a'..'z')
<digit> ::= '0'..'9'
<nonwhitespace> ::= ___________
您如何定义 EBNF 中的非空白(一个或多个不是空白的字符)?
对于那些熟悉 Java parboiled 库的人来说,如何实现定义非空白的规则?
【问题讨论】:
-
等等,重复量词在哪里?据我所知,语法只能是一个字母等
-
见
identifier-tail -
呃,好吧,我试图将它作为一个 EBNF 语法来阅读,其中
*本来应该在括号之前......
标签: java parsing ebnf parboiled