users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Writing a lexer...


From: emacstheviking
Subject: Writing a lexer...
Date: Fri, 12 Jul 2013 17:14:18 +0100

Hi,

I am trying to write a lexer in Prolog for educating myself but
despite understanding difference lists, DCG-s etc to the point where I
can do little examples, try as I might I cannot seem to make any
headway into my problem space as it were.

Last year I released (yet another) computer language into the world to
great acclaim (i.e. nobody knows about it except me and you) and
whilst I still use it "at home" for writing PHP and Javascript stuff,
I decided that redoing it in Haskell was too easy (Parsec!!) so Prolog
was my next choice as I like learning things. Constantly, like how
little I know!!

I have two main problems.

1) How to get the contents of a file file "into memory" so that I can
scan for tokens etc.
2) How to scan for tokens!

I thought that the first step would be to read the entire file into
memory as a character code list or something and start from there.

I have the concept in my head that the prolog code would be not too
far from the BNF for an s-expression, with DCG with extra parameters
being the way to go.

Putting all that to one side then, and starting from the beginning
(nearly always a good place to start), I want to know how I might go
about my task, converting a text file with someting like this:

    (defun test ()
        (echo "Hello World"))

into something like this, a list of tokens that could then become an
AST structure as the next step:

  [ popen, atom(defun), atom(test), popen, pclose, popen, atom(echo),
strdq("Hello World"), pclose, pclose ]

Sometimes I think Prolog would make it easer to build the AST at the
same time, like I have seen done in some examples in Art of Prolog...
I will of course be furiously reading and trying things myself too!

Thanks everybody,
Sean.

PS: http://feltweb.info is where my language thing is at, still
working on Java production though...



reply via email to

[Prev in Thread] Current Thread [Next in Thread]