小编Sky*_*094的帖子

shell 参数名称后带有磅和百分号的语法

请解释以下语法:

  i##*.

  i%.*   
Run Code Online (Sandbox Code Playgroud)

我明白它在做什么,但我想知道一般模式(为什么/如何这样做)。

它出现的代码:

#!/bin/bash

recursive_name_change()
{
    cd "$1"
    for i in *
    do
        #echo "${i##*.}"
        if [ -d "$i" ]
        then
            recursive_name_change "$i"
        elif [ "${i##*.}" = "cpp" ]
        then
             new_name=${i%.*}".c"
        mv "$i" "$new_name"
        fi
        done
        cd ../
    }

recursive_name_change .
Run Code Online (Sandbox Code Playgroud)

有人还请建议,我可以从哪里找到这些特殊的语法形式?

linux bash shell

3
推荐指数
1
解决办法
1605
查看次数

了解序言中反向列表的这种实现

我已经编写了以下小型知识库来反转给定列表,

reverse_list([],[]).
reverse_list([X|L1], [L2|X]) :-
   reverse_list(L1, L2).
Run Code Online (Sandbox Code Playgroud)

当前,执行时

reverse_list([a,b,c,d], X).
Run Code Online (Sandbox Code Playgroud)

它产生,

X = [[[[[]|d]|c]|b]|a].
Run Code Online (Sandbox Code Playgroud)

解释为什么会发生将不胜感激。而且,我该如何解决这个问题?

我认为在最后一步L2变为[],在向后传播期间,它变成这样。如何X = [d,c,b,a]使用这种方法的修改来获得类似的输出。

PS:我是Prolog的新手。

prolog

3
推荐指数
2
解决办法
447
查看次数

了解 lex 代码语法

在下面的 lex 代码中,我不明白尖括号 . <newstate>{DEFINITION} 语法如何工作?

     %{
    #include<stdio.h>
    int c=0;
    %}
    START "/*"
    END "*/"
    SIMPLE [^*]
    SPACE [ \t\n]
    COMPLEX "*"[^/]
    %s newstate
    %%
    "//"(.*[ \t]*.*)*[\n]+    {c++; fprintf(yyout," ");}
    {START}                    {yymore();BEGIN newstate;}
     <newstate>{SIMPLE}        {yymore();BEGIN newstate;}
     <newstate>{COMPLEX}      {yymore();BEGIN newstate;}
     <newstate>{SPACE}        {yymore();BEGIN newstate;}
     <newstate>{END}  {c++;fprintf(yyout," ");BEGIN 0;}
    %%
    main()
    {//program to remove comment lines
    yyin=fopen("file4","r");
    yyout=fopen("fileout4","w");system("cat file4");
    yylex();system("cat fileout4");
    printf("no.of comments=%d",c);
    fclose(yyin);
    fclose(yyout);
    }
    `
Run Code Online (Sandbox Code Playgroud)

compiler-construction lex bison flex-lexer

2
推荐指数
1
解决办法
205
查看次数

标签 统计

bash ×1

bison ×1

compiler-construction ×1

flex-lexer ×1

lex ×1

linux ×1

prolog ×1

shell ×1