Как вы можете определить альтернативные литералы в определении синтаксиса? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь определить синтаксис для синтаксического анализа определений данных в COBOL, и у меня есть конкретное определение для предложений изображения, таких как:

syntax PictureClause =  pic: "PIC" PictureStringType  PictureStringLen ("VALUE"|"VALUES") ValueSpec

Мое соответствие ADT для этого синтаксиса было таким:

data PictureClause = pic(str pictype, PictureStringLen plen, str valuespec);

Однако я заметил, что кажется, что функция implode пытается сопоставить оператор в скобках со вторым параметром str, а не игнорировать его как строковый литерал "PI C". Однако это определение синтаксиса сработало, как и ожидалось:

syntax PictureClause =  pic: "PIC" PictureStringType  PictureStringLen "VALUE" ValueSpec
                   |pic: "PIC" PictureStringType PictureStringLen "VALUES" ValueSpec;

Как гласит заголовок, как я могу определить альтернативы в одном выражении для литералов, которые я не хочу использовать в моем ADT в определении синтаксиса? Я вижу, что альтернативы возможны, но мне интересно, есть ли более краткий способ его определения в духе моей первой попытки

1 Ответ

0 голосов
/ 17 января 2020

Кажется, я помню, что текущая версия implode рассматривает альтернативы как узлы и не выравнивает их, даже если альтернативы являются просто литералами. Ваше определение идеально, тем не менее.

Это относительно простой запрос функции imho, если у вас есть время зарегистрировать его на GitHub.

Другой вариант - вообще не взламывать и использовать конкретный синтаксис

...