- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 lex 语言代码,我用 Flex 生成了 lex.yy.c。当我想将 lex.yy.c 编译为 .exe 文件时,出现了一些错误,如“未声明(首次在此函数中使用)”!当我在网络上搜索时,我知道我需要一个 Const.h 文件,所以我想生成该文件。我该怎么做?
一些错误:
35 C:\Users\Majid\Desktop\win\lex.l STRING' undeclared (第一次在这个函数中使用)
LC' undeclared(第一次使用在这个函数中)39 C:\Users\Majid\Desktop\win\lex.l `LP' undeclared (第一次在这个函数中使用)....
38 C:\Users\Majid\Desktop\win\lex.l
代码的开头是:
%{int stk[20],stk1[20];
int lbl=0,wlbl=0;
int lineno=0;
int pcount=1;
int lcount=0,wlcount=0;
int token=100;
int dtype=0;
int count=0;
int fexe=0;
char c,str[20],str1[10],idename[10];
char a[100];
void eatcom();
void eatWS();
int set(int);
void check(char);
void checkop();
int chfunction(char *);%}
Digit [0-9]
Letter [a-zA-Z]
ID {letter}({letter}|{digit})*
NUM {digit}+
Delim [ \t]
A [A-Za-z]]
%%
"/*" eatcom();
"//"(.)*
\"(\\.|[^\"])*\" return (STRING);
\"(\\.|[^\"])*\n printf("Adding missing \" to sting constant");
"{" {a[count++]='{';fexe=0;eatWS();return LC;}
"(" {a[count++]='(';eatWS();return LP;}
"[" {a[count++]='[';eatWS();return LB;}
"}" {check('{');eatWS();
if(cflag)
{
//stk[lbl++]=lcount++;
fprintf(fc,"lbl%d:\n",stk[--lbl]);
//stk[lbl++]=lcount++;
printf("%d\n",stk[lbl]);
cflag=0;
}
return RC;
}
"]" {check('[');eatWS();return RB;}
")" {check('(');eatWS();return RP;}
"++" | "--" return INCOP;
[~!] return UNOP;
"*" {eatWS();return STAR;}
[/%] {eatWS();return DIVOP;}
"+" {eatWS();return PLUS;}
"-" {eatWS();return MINUS;}
最佳答案
您需要一个包含定义的.h 文件。您可以手写,但通常此文件是由 Bison 生成的。 Flex 和 Bison 这两个工具经常一起使用。
Bison 是一个解析器生成器。它的输入是一个文件,您在其中编写了描述语言语法的语法,Bison 会生成一个解析器。解析器(或“语法分析器”)是编译器(或类似工具)的一部分,它根据语言的语法分析输入。例如,解析器知道 if 语句可以但不一定有 else 部分。
Flex 是一个扫描器生成器,它从一个带有正则表达式的文件创建一个扫描器。扫描器(或“词法分析器”)是编译器(或类似工具)的一部分,它分析输入并将其分成“标记”。标记可以是一个关键字,如 if,一个运算符,如 +,一个整数常量,等等。例如,扫描器知道整数常量被写为一个或多个数字的序列。
扫描器在找到 token 时向解析器报告。例如,如果输入以 123 开头,扫描器可能会识别出这是一个整数常量,并将其报告给解析器。在 Flex 和 Bison 的情况下,它通过返回整数常量的 token 代码来执行此操作,这可能(仅作为示例)是 17。但由于扫描器和解析器必须就这些 token 代码达成一致,因此它们需要共同的定义。 Bison 将生成 token 代码,如果给定标志 -d,它将在 .h 文件中输出它们。
托马斯尼曼的 A Compact Guide to Lex & Yacc很好地介绍了如何使用 Flex 和 Bison。 (Lex 和 Yacc 是旧的原始工具,而 Flex 和 Bison 是同一工具的新免费版本。)
关于lex - ....未声明(在此函数中首次使用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331929/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!