当前位置:  开发笔记 > 编程语言 > 正文

用于无大括号,空白敏感的C语法的工具

如何解决《用于无大括号,空白敏感的C语法的工具》经验,为你挑选了3个好方法。

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

#include 

int main(void)
  printf("Hello, world!")
  return 0

而不是这个:

#include 

int main(void) {
  printf("Hello, world!");
  return 0; 
}

有没有人知道将前者转化为后者的工具?

编辑:我真的没有兴趣与那些认为这是一个坏主意的人争论.一定要继续认为,你有自己的理由.但至少知道这一点:我知道Python是一种空格敏感的语言,但我还没有使用它.我为什么要?我已经知道Ruby了.也知道:我不仅仅是第一次学习C而且我已经使用PHP和JavaScript超过四年了,所以我并不是出于某些个人困难,对块语法缺乏熟悉或教条联系而要求这样做.我也知道写这些中的一个会涉及到什么,这不是我的能力,但我不希望这足以证明花时间写一个.



1> Edan Maor..:

即使有这样的工具,我也强烈建议你重新考虑这个想法.以下是我认为你会发现的一些问题:

    您的代码将不再是标准C.

    这意味着您在阅读代码时会遇到其他程序员的问题.

    您也将无法使用任何代码分析工具,因为他们无法理解您的语法.

    如果你有一些工具可以转换,比如每次编译,那仍然意味着你将编写的代码不同于你将要阅读的代码.我不愿意使用一种工具来改变我的代码.

这似乎是一种适合所有人的习惯的情况,这是一种更聪明的方法.

希望这会让你重新考虑.


如果可以的话,我会两次投票.我曾经有一个同事,他有一个头文件,他定义了所有关键字的拉丁版本,因此他可以使用拉丁关键字编写他的C代码.他还用相应的拉丁语替换了大括号.关于那段代码,我仍然梦寐以求.
@Jesper是对的,但对于这个问题,没有证据表明有任何同事.或者它将是生产任何东西.

2> Alok Singhal..:

如果你真的想这样做,那么在没有实现语言解析器的情况下是不可能的,即便如此,我也不确定编码约定对于你的"看起来像C的新语言"中的某些情况如何没有大括号".例如,采用以下C代码:

struct a {
    int i;
};

int main(void) {
    ...
}

你可以把它写成

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"的语法.正如其他人所说的那样,这种事情充满了危险.



3> 小智..:

PythoidC是一种无支撑的C语言http://pythoidc.googlecode.com

c.include(c.h.stdio) 
c.include(c.h.stdlib) 

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=c.stdlib.atoi(argv[1]) 
    c.stdio.printf('fibonacci(%d)=%d\n', n, fib(n))

PythoidC自动生成以下C代码:

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)); 
} 

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有