javaCC Count of call Function in put file stream
javaCC Count of number of call Function in put file stream
我希望javacc生成的解析器统计程序语句调用MyFunction的次数。
我的问题是如何计算 put 文件流中其他语句对函数 MyFunction 的调用次数。
MyFunction 由以下 JavaCC 规则定义:
void MyFunction () {}
{
<method> <id> "(" Argument () ")" {}
(Statement ()) *
<end_method>
}
void Argument () {}
{
<STRING> id
<STRING> id
}
void statement () {}
{
CallMyFonction ()
statementType2 () // here is another statement that can call method // by CallMyFonction ()
...........
}
void CallMyFunction () {}
{
<id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
}
void ExpressionTreeStructure () {}
{
......
}
非常感谢,
不清楚是要计算声明数还是调用数。而且,如果你想计算调用次数,你想为每个函数单独计数吗?
(a) 你想对声明进行计数。 添加一个 int 字段 "declCount" 到解析器 class。 (如果解析器是静态的,则将其设为静态。)向 MyFunction
添加一行
void MyFunction () {}
{
<method> <id> "(" Argument () ")" {}
(Statement ()) *
<end_method>
{ ++declCount ; } // add this line
}
(b) 您想对调用进行计数。 将一个 int 字段添加到解析器 class,称为 "callCount"。 (如果解析器是静态的,则将其设为静态。)向 CallMyFunction
添加一行
void CallMyFunction () {}
{
<id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
{ ++callCount ; } // add this line.
}
(c) 您想按函数名称分解调用计数。 向解析器添加一个字段
HashMap<String,Integer> callCounts = new HashMap<String,Integer>() ;
(如果解析器是静态的,则将其设为静态。)修改CallMyFunction
void CallMyFunction () {
Token name ; // Add this line
}
{
name = <id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
{ // Add this block.
int count = callCounts.containsKey( name.image )
? callCounts.get( name.image )
: 0 ;
callCounts.put( name.image, count + 1 ) ;
}
}
我希望javacc生成的解析器统计程序语句调用MyFunction的次数。
我的问题是如何计算 put 文件流中其他语句对函数 MyFunction 的调用次数。
MyFunction 由以下 JavaCC 规则定义:
void MyFunction () {}
{
<method> <id> "(" Argument () ")" {}
(Statement ()) *
<end_method>
}
void Argument () {}
{
<STRING> id
<STRING> id
}
void statement () {}
{
CallMyFonction ()
statementType2 () // here is another statement that can call method // by CallMyFonction ()
...........
}
void CallMyFunction () {}
{
<id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
}
void ExpressionTreeStructure () {}
{
......
}
非常感谢,
不清楚是要计算声明数还是调用数。而且,如果你想计算调用次数,你想为每个函数单独计数吗?
(a) 你想对声明进行计数。 添加一个 int 字段 "declCount" 到解析器 class。 (如果解析器是静态的,则将其设为静态。)向 MyFunction
添加一行 void MyFunction () {}
{
<method> <id> "(" Argument () ")" {}
(Statement ()) *
<end_method>
{ ++declCount ; } // add this line
}
(b) 您想对调用进行计数。 将一个 int 字段添加到解析器 class,称为 "callCount"。 (如果解析器是静态的,则将其设为静态。)向 CallMyFunction
添加一行 void CallMyFunction () {}
{
<id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
{ ++callCount ; } // add this line.
}
(c) 您想按函数名称分解调用计数。 向解析器添加一个字段
HashMap<String,Integer> callCounts = new HashMap<String,Integer>() ;
(如果解析器是静态的,则将其设为静态。)修改CallMyFunction
void CallMyFunction () {
Token name ; // Add this line
}
{
name = <id> "(" (
ExpressionTreeStructure ()
(
"," ExpressionTreeStructure ()
) *
) *
")"
{ // Add this block.
int count = callCounts.containsKey( name.image )
? callCounts.get( name.image )
: 0 ;
callCounts.put( name.image, count + 1 ) ;
}
}