我正在开发一种自定义编程语言,它将转换为C#然后进行编译。如何实现以下目标。
以下是我的自定义语言示例
Input
{
//variables are assigned here
}
Logic
{
//Logic is defined here
}
Output
{
//Output here
}
在上面的代码中,我想将Input,Logic和Output分成三个字符串, 中间部分将具有兼容的C#(通用于Java)代码。使用RegEx分离这三个块的最佳方法是什么。
我没有使用任何解析器,因为我认为它们会有点矫枉过正,因为实际的代码是c#。
答案 0 :(得分:1)
你可以试试这个:
Input[^\{]*\{([^\}]*)\}\nLogic[^\{]*\{([^\}]*)\}\nOutput[^\{]*\{([^\}]*)\}
组1,2,3具有输入,逻辑和输出内容
编辑: 正如你所指出的那样,里面也可能有花括号。所以这是更新的正则表达式。
Input(.*)Logic(.*)Output(.*)
以下是c#中的示例代码:
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"Input(.*)Logic(.*)Output(.*)";
string input = @"Input
{
{input is here}
}
Logic{
logic is here
}
Output{
output is here
}";
RegexOptions options = RegexOptions.Singleline;
Match match = Regex.Match(input, pattern, options);
Console.WriteLine("'{0}' found at index {1}", m.Value, m.Index);
}
}
但坦率地说,还有很多其他情况可能发生。请注意,即使是逻辑,输入和输出也可能出现在您的代码中。因此,使用其他东西来分隔块是明智的。说, 而不是使用{},你可以使用不太可能的东西,比如#START ##END#