flex中String与int类型转换

Flex中int和String互转

int -->String

1、在int后面加个'',int+''

2、用String(int)

String -->int

1、Number(String)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前面的回答,我们已经给出了一个简单的 Bison 示例,下面我们将结合 Flex 和 Bison 来实现 SysY 语言的词法分析和语法分析。 首先,我们需要编写一个 Flex 文件,用于识别 SysY 语言的词法单元。下面是一个简单的示例: ``` %{ #include "y.tab.h" %} %% [ \t\n]+ /* skip whitespace */ [0-9]+ { yylval.num = atoi(yytext); return NUM; } [a-zA-Z][a-zA-Z0-9]* { yylval.id = strdup(yytext); return ID; } "=" { return EQUAL; } ";" { return SEMICOLON; } "{" { return LBRACE; } "}" { return RBRACE; } %% int yywrap() { return 1; } ``` 在这个示例,我们定义了几个正则表达式来匹配 SysY 语言的不同词法单元。例如 `[0-9]+` 可以匹配一个或多个数字,`{ yylval.num = atoi(yytext); return NUM; }` 表示当匹配到数字时,将数字转换为整数,并返回 `NUM` 类型的词法单元。 接下来,我们需要编写一个 Bison 文件,用于识别 SysY 语言的语法规则。下面是一个简单的示例: ``` %{ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "y.tab.h" %} %token ID NUM EQUAL SEMICOLON LBRACE RBRACE %% program: stmt_list ; stmt_list: stmt_list stmt | stmt ; stmt: ID EQUAL NUM SEMICOLON | LBRACE stmt_list RBRACE ; %% int main() { yyparse(); return 0; } void yyerror(char* s) { printf("Error: %s\n", s); } int yywrap() { return 1; } ``` 在这个示例,我们定义了三个终结符(`ID`,`NUM` 和分号),以及三个非终结符(`program`,`stmt_list` 和 `stmt`)。其 `stmt` 可以表示一个赋值语句(`ID EQUAL NUM SEMICOLON`),或者一个复合语句(`LBRACE stmt_list RBRACE`)。`stmt_list` 可以表示一个或多个语句。 注意,在 Bison 文件,我们需要包含 `y.tab.h` 文件来使用 Flex 识别的词法单元。在 Flex 文件,我们使用 `%{ ... %}` 来包含 Bison 文件定义的头文件和符号。`yyerror` 函数用于处理语法错误。 最后,我们需要使用 `flex` 和 `bison` 工具来生成 C 代码,并将其编译成可执行文件。假设我们将 Flex 文件保存为 `scanner.l`,Bison 文件保存为 `parser.y`,则可以使用下面的命令来生成并编译代码: ``` flex scanner.l bison -d parser.y gcc -o parser parser.tab.c lex.yy.c ``` 其,`parser.tab.c` 是 Bison 生成的 C 代码,`lex.yy.c` 是 Flex 生成的 C 代码。编译完成后,可以使用 `./parser` 命令来运行程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值