Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于无括号、区分空格的C语法的工具_C_Syntax - Fatal编程技术网

用于无括号、区分空格的C语法的工具

用于无括号、区分空格的C语法的工具,c,syntax,C,Syntax,我现在正在写一些C,因为我喜欢空格敏感的语法,我想这样写: #include <stdio.h> int main(void) printf("Hello, world!") return 0 #包括 内部主(空) printf(“你好,世界!”) 返回0 与此相反: #include <stdio.h> int main(void) { printf("Hello, world!"); return 0; } #包括 内部主(空){ prin

我现在正在写一些C,因为我喜欢空格敏感的语法,我想这样写:

#include <stdio.h>

int main(void)
  printf("Hello, world!")
  return 0
#包括
内部主(空)
printf(“你好,世界!”)
返回0
与此相反:

#include <stdio.h>

int main(void) {
  printf("Hello, world!");
  return 0; 
}
#包括
内部主(空){
printf(“你好,世界!”);
返回0;
}
有人知道有一种工具可以将前者转换为后者吗


编辑:我真的没有兴趣和那些认为这是个坏主意的人争论。无论如何,继续认为,你有你的理由。但至少要知道:我知道Python是一种对空格敏感的语言,但我没有使用过它。我为什么要这么做?我已经认识鲁比了。还要知道:我不仅仅是第一次学习C语言,我已经使用PHP和JavaScript四年多了,所以我提出这个要求并不是出于个人困难、对块语法不熟悉或教条式的从属关系。我也知道写其中一本书需要做些什么,这并不是我力所能及的,但我不想让这足以证明花时间写一本书是合理的。

是的,有一本我很喜欢。他们称之为。

我认为不存在这样的工具。存在清理格式的工具,但代码必须已经是C格式的


我真的认为您应该按照设计使用该语言,并学习使用大括号。

没有工具,只有伪代码:

last_spc_count = 0
For all lines in input file check number of trailing spaces spc_count
  Print old line
  If spc_count > last_spc_count print "{\n" (last_spc_count-spc_count)/2 times
  Else If spc_count < last_spc_count print "}\n" (last_spc_count-spc_count)/2 times
  Else print "\n"
  last_spc_count = spc_count
print "}\n" last_spc_count/2 times
last\u spc\u count=0
对于输入文件中的所有行,检查尾随空格数spc\U计数
打印旧行
如果spc\u计数>上次spc\u计数打印“{\n”(上次spc\u计数-spc\u计数)/2次
否则,如果spc\U计数<上次spc\U计数打印“}\n”(上次spc\U计数-spc\U计数)/2次
否则打印“\n”
上次spc\U计数=spc\U计数
打印“}\n”上一次\u spc\u计数/2次

即使有这样的工具,我也强烈建议您重新考虑这个想法。以下是我认为您在执行此操作时会发现的几个问题:

  • 您的代码将不再是标准C
  • 这意味着您将遇到其他程序员阅读您的代码的问题
  • 您还将无法使用任何代码分析工具,因为它们无法理解您的语法
  • 如果你有某种工具可以在每次编译时进行转换,这仍然意味着你将编写与阅读不同的代码。我不喜欢使用一个工具,它总是为我修改代码
  • 在这种情况下,让你的习惯适合其他人才是更明智的方法

    希望这能让你重新考虑。

    看起来这就是你要找的东西。

    但那是另一种语言。。。它基本上是一种具有C性能属性的Python方言

    不要使用自己的语言,使用标准的语言。

    如果你真的想这样做,不实现语言解析器是不可能的,即使这样,我也不确定在你的“看起来像C但没有大括号的新语言”中的某些情况下,编码约定会是怎样的。例如,以以下C代码为例:

    struct a {
        int i;
    };
    
    int main(void) {
        ...
    }
    
    int fib(int n){ 
        if (n<=2){ 
            return 1;} 
        else{ 
            return fib(n-1) + fib(n-2);}} 
    
    int main(int argc, char **argv){ 
        int n ;//C style annotation 
        n=atoi(argv[1]); 
        printf("fibonacci(%d)=%d\n", n, fib(n)); 
    } 
    
    你可以这样写

    struct a
        int i
    
    int main(void)
        ...
    
    但它必须转换为原始代码,而不是:

    struct a {
        int i;
    } /* Note the missing semicolon! */
    
    int main(void) {
        ...
    }
    
    另外,给出以下代码片段:

    /* declare b of type struct a */
    struct a {
        int i;
    } b;
    
    /* a struct typedef */
    typedef struct a {
        int i;
    } b;
    
    您将如何在您的语言中指定这些内容

    你似乎也不想在你的语言中使用分号。这在很大程度上限制了您的代码,并使转换工具变得复杂,因为如果不付出额外的努力,就无法获得续行:

    i = j +
    k;
    
    C是合法的,但是

    i = j + ;
    k;
    
    事实并非如此


    因此,首先,您需要更精确地定义“无括号C”的语法。正如其他人所说,这类事情充满了危险。

    PythoidC是一种无支架的C语言

    c.include(c.h.stdio)
    c、 包括(c.h.stdlib)
    int fib(int n):
    
    如果(必须用Python编写一个工具:),那么它就不再是C了。就好像我想说英语,但把所有的动词放在第一位,因为我想说。不再是英语了。Python很容易学,如果你更喜欢它的语法,我想你会更喜欢它的。你的意思是什么?它不再是英语了?我一直都喜欢这样说话!这是个糟糕的主意。属于smartassoverflow。com@Robert屁股溢出来了?我被撕成两半了。我想投票支持你攻击Python,我想投票反对你攻击C,所以没有投票:我绝对不是在攻击C。我只是想让C成为Python。谢谢你的帮助。我很感激。现有的工具没有移除大括号,而是创建了特殊的缩进块。我只是觉得找不到它:(如果可以的话,我会投两次票。我曾经和一位同事打过交道,他在头文件中定义了所有关键字的拉丁语版本,这样他就可以用拉丁语关键字编写他的C代码。他还用相应的拉丁语词替换了大括号。我仍然在做关于这段代码的噩梦。@Jesper是的,但对于这个问题,没有证据表明至少有任何同事。或者这将是生产任何东西。-1。(1)和(2):OP没有提到任何关于其他程序员的事情。似乎是一个个人项目。(3)OP没有提到想要做任何分析。(4)嗯,编译器一直在更改代码。它们应该是这样的。gcc将代码转换为中间代码,然后进行优化,最后创建二进制代码,“看起来”一点也不像您的代码。没有证据表明大括号语法比空白语法更“聪明”。不同意!@rascher:我只是想澄清一下我的意思:3)通过代码分析,我包括了IDE通常可以对代码所做的一切,比如自动完成(显然这不仅仅是IDE的问题。任何标记程序都可能在理解代码时遇到同样的困难)。至于第4点,我可能不清楚。我说的是每次编译时都在源文件本身上进行转换(而不是生成新文件)。虽然,仍然找不到我前段时间看到的工具:(看起来还没有实现)
    int fib(int n){ 
        if (n<=2){ 
            return 1;} 
        else{ 
            return fib(n-1) + fib(n-2);}} 
    
    int main(int argc, char **argv){ 
        int n ;//C style annotation 
        n=atoi(argv[1]); 
        printf("fibonacci(%d)=%d\n", n, fib(n)); 
    }