Febrero 24, 2018, 06:15:37 am

Autor Tema: [C#] Ficheros + Gramáticas  (Leído 1278 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kicasta

  • Yo vivo en CPH
  • ***
  • Mensajes: 578
    • Ver Perfil
[C#] Ficheros + Gramáticas
« en: Diciembre 08, 2011, 03:07:38 am »
Bueno aquí dejo dos pequeños programas que manipulan ficheros de texto que más que útiles en sí sirven para ilustrar la importancia de las gramáticas y lo sencillo y limpio que queda el código.

En ambos casos la gramática es introducida en ANTLR (Another Tool for Language Recognition) y este se encarga de generar el Lexer y el Parser.

1. Contador de espacios en blanco y cambios de línea.

Código: You are not allowed to view links. Register or Login
grammar fileCounter;

options
{
language = 'CSharp';
}

@members
{
public int lines = 1;
public int chars = 1;
public int pages = 1;
public int words = 1;
public int tmpLin = 1;
}

ws : (' ')+ {chars++;
words++;
if(chars == 90)
{
lines++;
chars = 0;
}};

nl : ('\r''\n')+ {lines++;
words++;
tmpLin++;
if(tmpLin == 40)
{
pages++;
tmpLin = 0;
}};

     
WORD : (~('\r'|'\n' | ' ' | '\t'))+ ;

file : (WORD | nl | ws)* EOF;

y el código quedaría:
Código: You are not allowed to view links. Register or Login
using System;
using Antlr.Runtime;

namespace fileCounter
{
    class Program
    {
        static void Main(string[] args)
        {
            fileCounterLexer lexer  = new fileCounterLexer(new ANTLRFileStream("input.txt"));
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            fileCounterParser parser = new fileCounterParser(tokens);

            try
            {
                parser.file();

                Console.WriteLine("lines: " + parser.lines);
                Console.WriteLine("words: " + parser.words);
                Console.WriteLine("pages: " + parser.pages);
             
            }
            catch (Exception e)
            {
               
               Console.WriteLine(e.Message);
            }
        }
    }
}


2. Lleva todos los caracteres de un texto específico a UPPER y elimina los espacios en blanco innecesarios. El resultado lo almacena en otro fichero.
Código: You are not allowed to view links. Register or Login
grammar transformFile;

options
{
language = 'CSharp';
}

@header
{
using System.IO;
}

@members
{
StreamWriter writer;
}

file [string path] @init {writer = new StreamWriter(path);}
: (WS {writer.Write($WS.text);}
| NL {writer.Write($NL.text);}
| WORD{writer.Write($WORD.text);})* EOF;

WS : (' ' | '\t')+ {$text = ' '.ToString();};
NL : ('\r''\n') + {$text = "\r\n";};
WORD : (~('\r'|'\n' | ' ' | '\t'))+ {$text = $text.ToUpper();};

el código:

Código: You are not allowed to view links. Register or Login
using System;
using Antlr.Runtime;

namespace fileTrasform
{
    class Program
    {
        static void Main(string[] args)
        {
            transformFileLexer lexer = new transformFileLexer(new ANTLRFileStream("inputFile.txt"));
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            transformFileParser parser = new transformFileParser(tokens);

            try
            {
                parser.file("outputFile.txt");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Saludos

“When all you have is a hammer, every problem looks like a nail.”

You are not allowed to view links. Register or Login: You are not allowed to view links. Register or Login - You are not allowed to view links. Register or Login


resuelto
Gramaticas libre de contexto

Iniciado por tenaciousd

2 Respuestas
1679 Vistas
Último mensaje Mayo 20, 2011, 09:53:37 pm
por tenaciousd
exclamation
Tutorial comando tftp, subir ficheros y bajar ficheros con netcat

Iniciado por reydelmundo11

2 Respuestas
8531 Vistas
Último mensaje ſeptiembre 07, 2008, 02:52:53 pm
por M4inFox
xx
C y ficheros..

Iniciado por BTT-LFC

9 Respuestas
1730 Vistas
Último mensaje Marzo 21, 2009, 07:13:49 am
por BTT-LFC
xx
Ficheros en C

Iniciado por computer-man

13 Respuestas
1927 Vistas
Último mensaje ſeptiembre 08, 2010, 06:43:22 am
por computer-man
xx
ficheros en c++

Iniciado por Luis_264

1 Respuestas
1081 Vistas
Último mensaje Junio 04, 2009, 05:52:19 pm
por .xAk.
xx
ficheros C++

Iniciado por nandomagic

1 Respuestas
1385 Vistas
Último mensaje Enero 17, 2011, 04:13:16 pm
por nandomagic
exclamation
Ficheros en PHP

Iniciado por xT3mP

2 Respuestas
2601 Vistas
Último mensaje ſeptiembre 17, 2010, 08:37:17 am
por xT3mP
question
lectura de ficheros en C

Iniciado por roadd

1 Respuestas
1081 Vistas
Último mensaje Noviembre 25, 2011, 04:38:11 pm
por .xAk.
xx
Ayuda FIcheros 2

Iniciado por lDanny

6 Respuestas
1449 Vistas
Último mensaje Abril 14, 2009, 05:54:35 am
por lDanny
xx
Descomprimir ficheros .cab

Iniciado por HolyKnight

2 Respuestas
1079 Vistas
Último mensaje Julio 12, 2008, 01:46:51 pm
por vVegeta