Как разобрать вложенную мини-грамматику в строку, используя Coco/R?
Мне нужна помощь в построении грамматики Coco/R, чтобы соответствовать следующему:
// Expects "1+2=3" (String concat. No embedded expression)
"1+2="+(1+2)
// Expects "1+2=3" (Embedded expression)
"1+2=%(1+2)"
// Expects "1+2=3" (unlikely, but still valid embedded expression)
"%(pow(0,1-1))+%(sqrt(4))=%(10/2-2)"
Я пытаюсь сопоставить встроенные выражения в строке (в пределах%())
Вот грамматика, которая у меня сейчас есть.
Это соответствует всем 3 примерам выше. Но сейчас я понятия не имею, как продолжить.
COMPILER FooLang
CHARACTERS
letter = 'a'..'z'.
digit = '0'..'9'.
strChar = ANY - '"'.
TOKENS
ident = letter {letter}.
number = digit {digit}.
string = '"' {strChar} '"'.
PRODUCTIONS
FooLang = expr.
expr = equ.
method = ident '(' [ expr {',' expr} ] ')'.
equ = add { "==" add}.
add = mul { ('+'|'-') mul }.
mul = atom { ('*'|'/') atom }.
atom = number | string | method | '(' expr ')'.
END FooLang.
Грамматика в% () будет почти такой же, но с некоторыми отличиями (т.е. без строковых токенов)
Вот что я нашел до сих пор:
- Островная грамматика antlr3
- Обработка нескольких языковых контекстов с помощью субтрактивного переключения контекста
- Остров Грамматик
- ANTLR 4 лексера токены внутри других токенов
Похоже, что я хочу "лексерские режимы" Antlr, но для Coco/R.