Как разобрать вложенную мини-грамматику в строку, используя 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.

Грамматика в% () будет почти такой же, но с некоторыми отличиями (т.е. без строковых токенов)

Вот что я нашел до сих пор:

  1. Островная грамматика antlr3
  2. Обработка нескольких языковых контекстов с помощью субтрактивного переключения контекста
  3. Остров Грамматик
  4. ANTLR 4 лексера токены внутри других токенов

Похоже, что я хочу "лексерские режимы" Antlr, но для Coco/R.

0 ответов

Другие вопросы по тегам