我正在vb.net中编写一个超级小型解释器,因为我需要执行一种简单的(发明的)语言,以便应用程序理解它并做它需要做的事情。
一切顺利,直到我到达控制结构和循环。
所以我的问题是,在一个代码中,它使用一个简单的逐行执行,我怎么能匹配“WHILE”;和“ENDWHILE;”并在其中执行代码?
我想到的第一件事就是读取这条线上的那种标志并从该行读取内容直到找到“ENDWHILE”;以及要执行得晚的商店,所以要保持代码的分离,直到我完成所有部分,然后执行它。
但我不太确定如何编码或者我的推理是正确的。
PD:我正在使用正则表达式。答案 0 :(得分:1)
我不确定我100%了解你在做什么,所以如果这样做,我会提前道歉:)。
如果您这样做:
Dim m as Match
m=Regex.Match(strYourCode,"(WHILE;)((?!ENDWHILE;)*)(ENDWHILE;)")
然后m.Groups(2)中的代码应该只是内部WHILE代码。在解释方面,正则表达式查找WHILE,后跟任何不是ENDWHILE零次或多次的字符,然后是ENDWHILE。
再次,抱歉,如果这样,我没有测试正则表达式,所以它可能需要一些调整。
祝你好运!