C# 如何使用Coco/R解析字符串中嵌套的迷你语法?

C# 如何使用Coco/R解析字符串中嵌套的迷你语法?,c#,parsing,grammar,cocor,C#,Parsing,Grammar,Cocor,我需要帮助构建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/

我需要帮助构建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.
%()中的语法几乎相同,但有一些不同(即,没有字符串标记)

以下是我到目前为止的发现:


  • 似乎我想要Antlr的“lexer模式”,但对于Coco/R来说。

    这与C#有什么关系?我希望也许有一个解决方案可以使用Coco/R的语义动作和/或冲突解决程序,这涉及到编写C#代码(我的目标语言)。