我有一个定义DSL(特定于域的语言)的ANTLR语法.这个语法相对简单.它正在解析语言并输出C代码以创建一个非常基本的翻译器.
这种语言用于C#应用程序(键入某种控件,无论是RichTextBox还是自定义控件),一种要求是为此语言提供语法高亮显示.我已经浏览了互联网,希望能找到关于如何实现这一目标的某种信息,或者找到一种工具来让自己变得更容易.
在没有找到太多信息之后,我最好的假设是我需要使用ANTLR生成的词法分析器来查看标记并相应地对它们进行着色.这是正确的操作路径,还是有其他方法/工具为自定义域特定语言提供语法突出显示?如果这是正确的方法,我该如何识别特定的令牌?
如果我遗漏了任何重要信息,请询问!谢谢!
我一直致力于学习ANTLR以创建特定于域的语言.其中一个要求是将此DSL转换为C.我已经能够获得识别DSL的基本语法,但是我将此问题转换为C.主要是,我的问题来自尝试将DSL if语句转换为一个C if语句.我已经尝试在语法中使用print语句,但没有用(我正在使用C#).
这是我一直在测试的语法:
**ifTest.g**
grammar ifTest;
options
{
backtrack=true;
output=AST;
language=CSharp2;
}
/*************************
PARSER RULES
*************************/
prog : lambda
| statements EOF;
lambda : /* Empty */;
statements
: statement+;
statement
: logical
| assignment
| NEWLINE;
logical : IF a=logical_Expr THEN b=statements
{
System.Console.Write("\tif (" + $a.text + ")\n\t{\n\t" + "\t" + $b.text + "\n\n\t}");
}
( ELSE c=statements
{
System.Console.Write("\n\telse {\n\t\t\t" + $c.text + "\n\t}");
} )?
ENDIF
{
System.Console.Write("\n}");
}
;
logical_Expr
: expr
;
expr …Run Code Online (Sandbox Code Playgroud)