我正在尝试在 F# 中设置一个新项目。
我使用 FsLexYacc 作为工具,上次我使用它是在 Fsharp 电源组“进入”时。网站上的文档不是很好。在我看来,泛型类型注释 'end 因为它是一个关键字..
但我首先只是从页面复制粘贴虚拟文件以确保生成文件已启动并运行。(词法分析器、解析器和程序)
页面: https ://fsprojects.github.io/FsLexYacc/index.html
然后我得到
../../FSharp/Project/src/Lexer.fsl(21,81):错误 FS0001:“char”类型与“byte”类型不匹配
试图通过将 _ 更改为根本没有帮助的字节来强制执行类型
生成文件:
OS=$(shell uname -s)
ifeq ($(OS),Darwin)
export AS=as -arch i386
export CC=cc -arch i386 -framework CoreFoundation -lobjc -liconv
endif
.PHONY: all clean
fsl = fslex
fsp = fsyacc
fsc = fsharpc --nologo
fsyacclib = FsLexYacc.10.2.0/build/fsyacc/netcoreapp3.1/FsLexYacc.Runtime.dll
Main = bin/Main.exe
LexerGen = src/Lexer.fs
ParserGen = src/Parser.fs
Lexer = bin/Lexer.dll
Parser = bin/Parser.dll
all: $(Main)
$(LexerGen): src/Lexer.fsl
$(fsl) src/Lexer.fsl -o $(LexerGen)
$(ParserGen): src/Parser.fsy
$(fsp) -v --module Parser src/Parser.fsy -o $(ParserGen)
$(Lexer): $(LexerGen) $(Parser)
$(fsc) -a $(LexerGen) -r $(Parser) -o $(Lexer)
$(Parser): $(ParserGen) $(Regex) $(fsyacclib)
$(fsc) -a $(ParserGen) -r $(Regex) -r $(fsyacclib) -o $(Parser)
$(Main): src/Main.fsx $(Lexer) $(Parser)
$(fsc) -a src/Main.fsx -r $(fsyacclib) -r $(Lexer) -r $(Parser) -o $(Main)
clean: rm /bin/*.dll