У меня есть грамматика, которая содержит:
constant ::= integer-literal
| char-literal
∣ string-literal
expression ::= constant
pattern ::= constant | char-literal .. char-literal
Я только что приступил к разбору с рекурсивным спуском и мне было интересно, как структурировать мой код для повторного использования синтаксического анализа constant
.Проблема в том, что когда я вижу char-literal
, я не могу просто проанализировать константу в pattern
.Если следующий токен - ..
, это другой тип шаблона.
Представьте себе следующий код:
let parseConstant p =
match p.token with
| Int i -> Const_int (int_of_string i)
| String s -> Const_string (s, None)
| Char c -> Const_char c
Как бы я структурировал parseExpression
и parsePattern
функция для повторного использования parseConstant
?Или я просто создаю другую parsePatternConstantMaybeDotDotOtherGrammarThing
функцию для шаблонов?