Я пытаюсь определить синтаксис для синтаксического анализа определений данных в 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 в определении синтаксиса? Я вижу, что альтернативы возможны, но мне интересно, есть ли более краткий способ его определения в духе моей первой попытки