1 个不稳定版本
0.1.2 | 2023年11月21日 |
---|
#20 in #makefile
19KB
126 行
rolyng_basic_make_parser
用于教育目的的基本 make 语法解析器
描述
- 为解析基本 Makefile 创建的 Make 语法解析器
- 支持基本目标、依赖和命令
语法
file = {SOI ~ line+ ~ EOI}
line = {(EMPTY_LINE | rule)}
rule = {rule_header ~ recipe}
rule_header = {rule_name ~ ":" ~ dependencies? ~ "\n"}
dependencies = {identifier ~ ("," ~ identifier)*}
rule_name = {identifier}
recipe = {EMPTY_LINE | (recipe_command+)}
recipe_command = { RECIPE_PREFIX ~ shell_command ~ "\n"}
shell_command = @{(!"\n" ~ ANY)+}
identifier = @{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | "_")* }
RECIPE_PREFIX = _{"\t"}
EMPTY_LINE = _{"\n"}
WHITESPACE = _{ " " }
COMMENT = _{ "#" ~ (!"\n" ~ ANY)*}
- file - 解析 Makefile 的主规则
- line - 每行文本的规则。可以是空的或 make 规则
- rule - 由标题和配方组成的规则
- rule_header - make 规则的标题,包含其名称和依赖项
- dependencies - 在这个基本解析器中,基本上是由命令分隔的标识符
- rule_name - 规则名称的标识符
- recipe - 可以是空的或由一些 recipe_commands 组成
- recipe_command - 以 RECIPE_PREFIX 开始,通常 make 中的 \t,之后包含在 shell 中执行的命令。以换行符结束
- shell_command - 不包含换行的任何内容
- identifier - 以符号开始,后跟任何数字字母或 '_'. 也不能包含空格
用法
./rolyng_basic_make_parser -h or --help or help #show help
./rolyng_basic_make_parser -V #show version
./rolyng_basic_make_parser -f or --file <file> #parse a file
./rolyng_basic_make_parser author #prints author
示例
#comment
aaa: bbb, ccc #comment
echo ab
bbb: adsa
echo bbb
ccc:
echo ccc
cat boba
ddd:
输出
Rule
name: aaa
dependencies: bbb,ccc,
commands:
echo ab
Rule
name: bbb
dependencies: adsa,
commands:
echo bbb
Rule
name: ccc
dependencies:
commands:
echo ccc
cat boba
Rule
name: ddd
dependencies:
commands:
依赖项
~4MB
~75K SLoC