나는 다음과 같은 최소한의 Peg.js 문법 정의했습니다 :peg.js에서 어떻게 역 추적이 가능합니까 (예를 들어)?
start = "A1"/"A123"
당신이 in the sandbox을 시도 할 수 있습니다.
"A1"과 "A123"이 일치 할 것으로 예상됩니다 (백 트랙킹 작동 방식에 대한 나의 견해에 따르면). 그러나 이것은 사실이 아닙니다 : 문법은 "A1"을 인식하지만 "A123"을 인식하지 못합니다.
참고 : 관련 질문 How to transform a simple grammar into something which works in PEG.js (expected "a" but "a" found)에서와 같이 "용어의 순서를 역으로"하는 조언을 찾고있는 것이 아닙니다. 오히려, 나는 내가 보는 행동을 이해하려고하며, 왜 Peg.js의 역 추적이이 경우에 적용되지 않는지 이해하려고합니다. 내 용어의 순서를 뒤집어도 도움이되지 않는 이유에 대한 설명은 아래의 좀 더 현실적인 예를 참조하십시오.
보다 현실적인 예를 보려면 단위 분석을 고려하십시오. 문법은 "mm", "mmol"과 같은 접두어 및 "yr", "week"또는 "mo"와 같은 비표준 단위를 사용하여 미터법 단위 (예 : "m", "mol")를 인식해야합니다.
다음과 같은 Peg.js 문법은 "mo"를 소모하여 다시 되돌아 가지 않으므로 "mol"을 인식하지 못합니다.
start = nonmetric/metric/prefix metric
metric = "mol"/"l"/"m"/"g"
nonmetric = "yr"/"mo"/"week"/"day"/"hour"
prefix = "m"/"k"/"c"
나는 ANTLR에서와 똑같이 일을 할 수 있습니다 ("몰"또는 "밀리몰"의 비용으로 인식되도록, 또는 오히려 "모"것입니다 용어의 순서는 도움이되지 않습니다 변경.) 좋은 성공 :
grammar units;
start : nonmetric | metric | prefix metric;
metric : 'mol' | 'l' | 'm' | 'g';
nonmetric : 'yr' | 'mo' | 'week' | 'day' | 'hour';
prefix : 'm' | 'k' | 'c';
Antlr에서 오는 Peg.js를 배우려고 할 때이 문제에 대한 좋은 예제를 보내 주셔서 감사합니다. 문법에 무슨 문제가 있는지 이해하는 데 정말 도움이되었습니다. – Mitja