从表达式中提取变量
variable extraction from expression
我有以下问题但没有任何线索:
for expression in string: "func1( A+ func2(A)+ func3(B)+ C + 4 )"
需要一种方法来识别所有变量,在本例中为 A、B、C。表达式可以不同,因此不应仅硬编码为该模式。例如:它可以只是 func1(A)+func2(B)
,变量是 A 和 B.
一点背景知识:还是以"func1( A+ func2(A)+ func3(B)+ C + 4 )"
为例,假设我有A的其他表达式:"A=sum(a)"
和"B=sum(b)"
和"C=sum(c)"
,我想做合并使第一个表达式变为:"func1( sum(a)+ func2(sum(a))+ func3(sum(b))+ sum(c)+4)"
,为了实现这一点,我想我需要一种方法来识别第一个表达式中的所有变量,这就是问题的来源。
编辑:刚刚意识到这有点类似于 js 缩小过程...刚刚向这个问题添加了 uglifyjs 标签
非常感谢任何答案或线索!
已解决:这已通过与 AST 一起使用的 exprima.js 解决。请检查接受的答案和 commnets
这应该可以帮助您完成大部分工作。我看到您可能遇到的一个问题是函数也是 JavaScript 中的变量,因此您必须挑选出所有不是被调用者的变量(标识符)。
$(function() {
$('#out').text(
JSON.stringify(
esprima.parse("func1( A+ func2(A)+ func3(B)+ C + 4 )"),
null, 2
)
);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/jquery/esprima/2.7.1/esprima.js"></script>
<pre id='out'>
</pre>
我有以下问题但没有任何线索:
for expression in string: "func1( A+ func2(A)+ func3(B)+ C + 4 )"
需要一种方法来识别所有变量,在本例中为 A、B、C。表达式可以不同,因此不应仅硬编码为该模式。例如:它可以只是 func1(A)+func2(B)
,变量是 A 和 B.
一点背景知识:还是以"func1( A+ func2(A)+ func3(B)+ C + 4 )"
为例,假设我有A的其他表达式:"A=sum(a)"
和"B=sum(b)"
和"C=sum(c)"
,我想做合并使第一个表达式变为:"func1( sum(a)+ func2(sum(a))+ func3(sum(b))+ sum(c)+4)"
,为了实现这一点,我想我需要一种方法来识别第一个表达式中的所有变量,这就是问题的来源。
编辑:刚刚意识到这有点类似于 js 缩小过程...刚刚向这个问题添加了 uglifyjs 标签
非常感谢任何答案或线索!
已解决:这已通过与 AST 一起使用的 exprima.js 解决。请检查接受的答案和 commnets
这应该可以帮助您完成大部分工作。我看到您可能遇到的一个问题是函数也是 JavaScript 中的变量,因此您必须挑选出所有不是被调用者的变量(标识符)。
$(function() {
$('#out').text(
JSON.stringify(
esprima.parse("func1( A+ func2(A)+ func3(B)+ C + 4 )"),
null, 2
)
);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/jquery/esprima/2.7.1/esprima.js"></script>
<pre id='out'>
</pre>