매우 간단한 작업을 수행하기 위해 문맥 자유 문법을 작성하려고합니다. (1) 줄 끝 부분 공백 및 (2) 그 밖의 모든 것. 예를 들어 :줄 끝 공백을 인식하는 문맥없는 문법
This.first.line...\n..and.this....second.line\n.\n..and.final.line
이 ("."
로 " "
및 가독성 "\n"
로 줄 바꿈을 표시하는) 나는이 문법 쓴
"This.first.line", "...\n..", "and.this....second.line", "\n.\n..", "and.final.line"
로 분석된다
string = raw_start | newline_start
raw_start = raw_section [newline_start]
newline_start = newline_section [raw_start]
raw_section = {any_character_except_newline}
newline_section = {whitespace_except_newline} new_line {any_whitespace_character}
을하지만이 때문에 정확하지 않습니다 {any_character_except_newline}
은 줄 바꿈까지 이어지는 공백을 사용합니다.에 포함 된 공백을 원하면
문법의 문맥 자유 속성을 잃지 않고 "개행 전에 개행하지 않으면 공백을 소비"라고 말할 수 있습니까?
나를 위해 이해해야 할 열쇠는 줄 'EVERYTHING_ELSE = {xωy | x, y ∈ NOTSPACE ∧ ω ∈ NOTEOL *}'을 사용하고, raw_section의 마지막 문자가 공백이 아닌 문자 여야한다는 것을 인식해야합니다. – drhagen
@drhagen : 차가움. 'EOL_WHITESPACE'의 정의에서 오류를 수정했습니다. 사실, 그 규칙에서, ω는 간단히'SPACE *'일 수 있지만, 모호성을 신경 쓰지 않는다면 아무런 차이가 없습니다. 또한 'Other'에 버그를 수정했습니다. (공백이 아닌 문자 하나만 남기지 않았습니다.)이 모든 경우 실제로 문법 테스트를하는 것이 중요합니다. 그래도이 경우 아직 수행하지 않은 것입니다. ( – rici