Скажем, у меня есть следующий EBNF:
document = content , { content } ;
content = hello world | answer | space ;
hello world = "hello" , space , "world" ;
answer = "42" ;
space = " " ;
Это позволяет мне разобрать что-то вроде:
hello world 42
Теперь я хочу расширить эту грамматику блочным комментарием. Как я могу сделать это правильно?
Если я начну с простого:
document = content , { content } ;
content = hello world | answer | space | comment;
hello world = "hello" , space , "world" ;
answer = "42" ;
space = " " ;
comment = "/*" , ?any character? , "*/" ;
не могу разобрать:
Hello /* I'm the taxman! */ World 42
Если я расширяю грамматику дальше с помощью специального случая сверху, она становится уродливой, но анализируется.
document = content , { content } ;
content = hello world | answer | space | comment;
hello world = "hello" , { comment } , space , { comment } , "world" ;
answer = "42" ;
space = " " ;
comment = "/*" , ?any character? , "*/" ;
Но я все еще не могу разобрать что-то вроде:
Hel/*p! I need somebody. Help! Not just anybody... */lo World 42
Как бы я сделал это с грамматикой EBNF? Или это вообще невозможно?