使用ident来格式化你的c程序

本站网友提到Linux小工具indent,试用了一下,果然很好用,现总结一下,期望能给读者带来帮助。

 

 下载和安装:

  1. Linux(Fedora)用户来说,最简单的安装方式是"yum install indent"

  2. Windows 用户可从http://gnuwin32.sourceforge.net/packages/indent.htm下载。

 

用法:

  请参阅:http://www.worldhello.net/doc/program_rules/indent.html,该文给出详细的用法。

   试用了几次,我发现参数“-i4 -bli0 -ut -ts4”是我喜欢的风格。

 

批量格式化文件的方法(我自己写的脚本,已经过验证)

1.Windows 用户:

  1. 进入你需要格式整理的源代码根目录

  2.将下面的内容另存为 indent_my_prg.bat

  3. 运行indent_my_prg.bat

 

@echo off

setlocal enabledelayedexpansion

dir *.c /s /b>c_list.txt

for /f "tokens=1* delims=" %%a in ('findstr . c_list.txt') do (

::echo %%a

set aa=%%a

indent -i4 -bli0 -ut -ts4 !aa!)

 

1.Linux 用户:

 1. 进入你需要格式整理的源代码根目录

2. -------下面的内容另存为 indent_my_prg_in.sh

3. 运行indent_my_prg_in.sh

 

@echo off

setlocal enabledelayedexpansion

dir *.c /s /b>c_list.txt

for /f "tokens=1* delims=" %%a in ('findstr . c_list.txt') do (

::echo %%a

set aa=%%a

indent -i4 -bli0 -ut -ts4 !aa!)

 

Indent 到底能够将代码排成什么样的,下面给出一个例子,以下给出一个格式比较变态,可计算大数阶乘的程序

 

#define N 100

int a[N*5]={1},n=N,i,c,m=1;main(){for(;n;n--){for(c=i=0;i<m||c;)a[i++]=(c+=a[i]*n)%10,c/=10;m=i;}for(;m;)putch(a[--m]+48);}

 

下面是格式重排后的代码,是不是好看了很多。

 

#define N 100
int a[N * 5] = { 1 }, n = N, i, c, m = 1;
main ()
{
        for (; n; n--)
        {
                  for (c = i = 0; i < m || c;)
                           a[i++] = (c += a[i] * n) % 10, c /= 10;
                  m = i;
        }
        for (; m;)
                  putch (a[--m] + 48);
}


转载 地址 http://blog.csdn.net/liangbch/article/details/7516487

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PL/0语言的语法分析一般使用LL(1)文法进行分析,下面是使用C语言编写的PL/0编译程序的语法分析程序的基本框架: ```c /* PL/0语言的语法分析程序 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* 定义PL/0语言的语法规则 */ /* 定义词法分析器的返回类型 */ typedef enum { IDENT, NUMBER, PLUS, MINUS, TIMES, SLASH, ODD, EQL, NEQ, LSS, LEQ, GTR, GEQ, LPARENT, RPARENT, COMMA, SEMICOLON, PERIOD, BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM, WHILESYM, DOSYM, CALLSYM, CONSTSYM, VARSYM, PROCSYM, WRITESYM, READSYM } Symbol; /* 定义语法分析器的数据结构 */ typedef struct { Symbol sym; /* 当前符号 */ int val; /* 当前数值 */ char id[10]; /* 当前标识符 */ FILE *fin; /* 输入文件指针 */ } Parser; /* 初始化语法分析器 */ void init(Parser *parser, const char *filename) { parser->fin = fopen(filename, "r"); if (!parser->fin) { fprintf(stderr, "Cannot open file: %s\n", filename); exit(1); } } /* 从输入流中读取下一个符号 */ void nextSymbol(Parser *parser) { // TODO: 实现读取下一个符号的代码 } /* 抛出语法分析错误 */ void syntaxError(const char *msg) { fprintf(stderr, "Syntax error: %s\n", msg); exit(1); } /* 匹配指定的符号 */ void matchSymbol(Parser *parser, Symbol expected) { if (parser->sym == expected) { nextSymbol(parser); } else { char msg[100]; sprintf(msg, "Expected symbol: %d", expected); syntaxError(msg); } } /* 解析PL/0语言的程序 */ void parseProgram(Parser *parser) { // TODO: 实现解析PL/0语言程序的代码 } int main(int argc, char *argv[]) { Parser parser; if (argc < 2) { fprintf(stderr, "Usage: %s filename\n", argv[0]); return 1; } init(&parser, argv[1]); nextSymbol(&parser); parseProgram(&parser); fclose(parser.fin); return 0; } ``` 在上述代码中,我们定义了PL/0语言的词法分析器返回的符号类型`Symbol`,以及解析器的数据结构`Parser`。`init`函数用于初始化语法分析器,`nextSymbol`函数用于从输入流中读取下一个符号,`syntaxError`函数用于抛出语法分析错误,`matchSymbol`函数用于匹配指定的符号。`parseProgram`函数用于解析PL/0语言的程序。在`main`函数中,我们初始化语法分析器,读取第一个符号,然后调用`parseProgram`函数解析整个PL/0程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值