我对Syntax Definitions for Sblime text 2
非常感兴趣我已经研究了基础知识,但我不知道如何为smth编写RE(和规则)
variable = sentense
,即myvar = func(foo, bar) + baz
我不能写出比^\s*([^=\n]+)=([^=\n]+\n)
更好的东西(这不起作用)
如何以正确的方式写这个RE?
另外,我在为块
定义RE时遇到一些困难IF i FROM .. TO ..
...
ELSE
...
END IF
锄头要写吗?
答案 0 :(得分:3)
在这种情况下,您必须编写解析器。正则表达式不起作用,因为模式可能会有所不同。当你说'变量=句子'时,你已经注意到了它。 为此,您可以使用spoofax或javacup进行语法定义。我会在JavaCup中给你一个片段:
扫描仪问题:假设'变量'遵循以下模式:(_ | [a-zA-Z])(_ | [a-zA-Z])* 和'数字'是:([0-9])+ 请注意,number可以是任何十进制或int,但在这里我将其声明为该模式,假设我的语言只处理整数(或任何模式意味着:))。
现在我们可以按照JavaCUP语法声明我们的语法。这或多或少像:
表达式:: =变量“=”句子
句子:: =句子“+”句子;
句子:: =句子“ - ”句子;
句子:: =句子“*”句子;
句子:: =句子“/”句子;
句子:: =数字;
......而且情况更进一步。
如果你从未有任何编译器类,可能看起来很难看到。另外,在解析器中避免无限循环有很多语法限制,具体取决于你使用的是哪个(RL或LL)。
无论如何,你问题的真正答案是:你不能只用正则表达式做你想做的事情,我需要更多的概念。