lex 布局 一行固定显示5个多出换行
时间: 2023-11-09 19:23:26 浏览: 41
对于一个使用lex布局的容器,如果要实现一行固定显示5个元素,超过的元素自动换行,可以使用如下的CSS样式:
```
.container {
display: flex;
flex-wrap: wrap;
}
.item {
flex: 0 0 20%;
/* 宽度为容器宽度的1/5 */
}
```
其中,`.container` 为容器的类名,`.item` 为每个元素的类名。通过设置 `.container` 的 `display` 属性为 `flex`,并且设置 `flex-wrap` 属性为 `wrap`,即可让元素超出容器范围时自动换行。
同时,为了让每个元素固定显示为一行的 5 个,可以设置每个元素的 `flex` 属性为 `0 0 20%`,其中 `20%` 表示元素宽度为容器宽度的 1/5。这样,每行就能够显示 5 个元素了。
相关问题
使用lex和yacc制作一个算术计算器,给出完整的操作步骤
好的,以下是使用lex和yacc制作一个算术计算器的操作步骤:
1. 安装flex和bison(yacc的替代品)。
2. 创建一个名为“calculator.l”的文件,这是lex文件。
3. 在“calculator.l”中定义要识别的词法单元。例如,下面的代码定义了加号和减号:
```
"+" return PLUS;
"-" return MINUS;
```
4. 定义数字的识别方式:
```
[0-9]+(\.[0-9]+)? return NUMBER;
```
这条语句表示匹配一个或多个数字,后面可能跟一个小数点和一个或多个数字。如果匹配成功,返回“NUMBER”词法单元。
5. 定义其他识别方式,如左右括号:
```
"(" return LPAREN;
")" return RPAREN;
```
6. 在文件的末尾添加以下代码以处理不需要识别的字符:
```
. return yytext[0];
```
7. 保存“calculator.l”文件并编译它:
```
flex calculator.l
```
这将生成一个名为“lex.yy.c”的文件。
8. 创建一个名为“calculator.y”的文件,这是yacc文件。
9. 在“calculator.y”文件中定义语法规则。例如,下面的代码定义了加法和减法:
```
expr : expr PLUS term
| expr MINUS term
| term
;
term : term TIMES factor
| term DIVIDE factor
| factor
;
factor : NUMBER
| LPAREN expr RPAREN
;
```
这些规则描述了算术表达式的结构。例如,“expr”规则表示表达式可以由“expr PLUS term”、“expr MINUS term”或“term”组成。
10. 添加代码以处理错误情况:
```
error : /* empty */
| error yyerror("Syntax error");
;
```
这些代码表示如果解析时出现错误,将调用“yyerror”函数。
11. 保存“calculator.y”文件并编译它:
```
bison -d calculator.y
```
这将生成一个名为“calculator.tab.c”的文件。
12. 编译并链接“lex.yy.c”和“calculator.tab.c”:
```
cc lex.yy.c calculator.tab.c -o calculator
```
13. 运行生成的可执行文件:
```
./calculator
```
这将启动计算器并等待用户输入表达式。例如,输入“2 + 3”,然后按回车键,计算器将输出“5”。
希望这些步骤对您有所帮助!
使用lex和yacc制作一个算术计算器
好的,下面是使用lex和yacc制作一个算术计算器的步骤:
1. 定义词法分析器
使用lex工具定义词法分析器,即将输入的字符串分解为一个个符号(token),并将其传递给语法分析器(yacc)。在这个例子中,我们需要定义数字、加号、减号、乘号、除号以及左右括号等符号。
下面是一个简单的词法分析器的例子:
```
%{
#include "y.tab.h"
%}
%%
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return TIMES; }
"/" { return DIVIDE; }
"(" { return LPAREN; }
")" { return RPAREN; }
[ \t] { /* ignore whitespace */ }
\n { /* end of line */ }
. { printf("invalid input\n"); }
%%
int yywrap() {
return 1;
}
```
2. 定义语法分析器
使用yacc工具定义语法分析器,即定义输入符号串的语法规则,并生成可执行的语法分析器。在这个例子中,我们需要定义算术表达式的语法规则,例如加法、减法、乘法、除法以及括号等。
下面是一个简单的语法分析器的例子:
```
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token NUMBER PLUS MINUS TIMES DIVIDE LPAREN RPAREN
%%
input:
/* empty */
| input line
line:
exp '\n' { printf("= %d\n", $1); }
exp:
exp PLUS exp { $$ = $1 + $3; }
| exp MINUS exp { $$ = $1 - $3; }
| exp TIMES exp { $$ = $1 * $3; }
| exp DIVIDE exp { $$ = $1 / $3; }
| LPAREN exp RPAREN { $$ = $2; }
| NUMBER { $$ = $1; }
;
%%
int main() {
yyparse();
return 0;
}
int yyerror(char *s) {
fprintf(stderr, "error: %s\n", s);
return 0;
}
```
3. 编译和运行
使用以下命令编译并运行程序:
```
$ lex calc.l
$ yacc -d calc.y
$ gcc lex.yy.c y.tab.c -o calc
$ ./calc
```
之后就可以输入算术表达式并得到计算结果了。