我正在编写lex代码以将标签转换为空格键(一个标签等于4个空格键)并计算这些空格键。代码如下:
[Test]
public void Libary1_Methode1_struct()
{
Speed speed = new Speed(new CommInterface());
int response = 99;
Mock<ILibary> mockLibary = new Mock< ILibary>();
mockLibary.Setup(
r =>
r. Methode1(It.IsAny<ushort>(), It.IsAny<short>(), It.IsAny<short>(), It.IsAny<RealLibary.Struct1>()))
.Callback<ushort, short, short, RealLibary.Struct1>(
(hndl, a, b, dbaxis) =>
{
dbaxis.data = new[] {0, 1, 2, 3};
dbaxis.dummy = 0;
dbaxis.type = 0;
});
RealLibary.Struct1 struct1 = new RealLibary.Struct1();
List<object> list = new List<object>();
list.Add(new short());
list.Add(struct1);
list.Add(new short());
list.Add(new short());
speed.Methode1(0, mockLibary.Object, list, out response);
Assert.AreEqual(4, struct1.data.Length);
}
输出应该打印一个语句:printf(“空格键是:%d”,spacebarCount);但事实并非如此。那么我该怎么做才能打印出我想要的输出呢?另外,我试图在主函数中替换下面的语句,但它没有用。
%{
#include<stdio.h>
int spacebarCount=0;
%}
%%
[\t] {
spacebarCount+=4;
}
[ ] {
spacebarCount++;
}
%%
int main()
{
yylex();
printf("The spacebar is: %d",spacebarCount);
spacebarCount=0;
}
答案 0 :(得分:0)
在flex中,可以通过将End-Of-File与模式<<EOF>>
匹配来处理:
%{
#include<stdio.h>
int spacebarCount=0;
%}
%%
[\t] {
spacebarCount+=4;
}
[ ] {
spacebarCount++;
}
<<EOF>> {
printf("The spacebar is: %d",spacebarCount);
return 0;
}
%%
int main()
{
yylex();
}