Lex和Yacc在Windows中的使用

  • 内容
  • 评论
  • 相关
文章目录
[隐藏]

废话

  Lex&Yacc是Unix中的工具,如果你想在Linux or 类Linux的os上使用,可以安装其对应的gnu实现版本,Flex&Bison。而我还是习惯使用Windows,所幸msys2中有这两个工具,再配合vs code中的高亮插件,用起来还是很happy的!
vscode

安装&配置

  在msys2环境中输入

pacman -S flex bison

  在vs code按Ctrl + P然后输入

ext install vscode-yacc
ext install lex

  生成并编译

lex a.lex && gcc -o parser lex.yy.c -lfl && ./parser

  至此就能愉快的在Windows上使用Lex&Yacc了,写本文的目的是记录一个小坑:即用flex生成的.c文件,无法直接用gcc编译,需要使用-lfl选项,否则gcc会报错

/c/Users/chen9/AppData/Local/Temp/ccgBARrF.o:lex.yy.c:(.text+0x539): undefined reference to `yywrap'
/c/Users/chen9/AppData/Local/Temp/ccgBARrF.o:lex.yy.c:(.text+0x539): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `yywrap'
/c/Users/chen9/AppData/Local/Temp/ccgBARrF.o:lex.yy.c:(.text+0x1166): undefined reference to `yywrap'
/c/Users/chen9/AppData/Local/Temp/ccgBARrF.o:lex.yy.c:(.text+0x1166): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `yywrap'
/usr/lib/../lib/libmsys-2.0.a(libcmain.o): In function `main':
/msys_scripts/msys2-runtime/src/msys2-runtime/winsup/cygwin/lib/libcmain.c:37: undefined reference to `WinMain'
/msys_scripts/msys2-runtime/src/msys2-runtime/winsup/cygwin/lib/libcmain.c:37:(.text.startup+0x94): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: error: ld returned 1 exit status