« 今日の日記 | Main | Verilog2005 の Compiler directives »

2008.06.02

プリプロセッサと字句解析と構文解析と

今悩んでいるところをまとめてみました。
ターゲットはVerilogですが、伝わりやすいようにソースはC言語で整理してみました。

(1)やりたいこと
パーサを作って、ドキュメントやテストプログラムを自動生成したい。

(2)僕が理解している教科書的流れ
プリプロセッサ:全てのマクロを展開する。

字句解析:マクロが展開されたソースコードに対して、字句解析を行う。

構文解析:字句解析の後に、構文解析を行う

(3)困っていること その1
#define SIZE 5
int a[SIZE];

をプリプロセッサを通すと、int a[5];になってしまい、5という値が#define SIZE 5 によって展開されたという情報が無くなってしまう。

僕が作りたいプログラムでは、int a[SIZE];という情報も使いたい。

(4)困っていること その2
#include や#ifdefなどのディレクティブは最初のプリプロセッサで処理して、#define による置換はシンボルテーブル相当の物を作っておくのはどうか。

極端な例だけど、こんな変態的なマクロに対応できない。
#define SIZE 3];int b[2
int a[SIZE];

これくらいは普通にある。
#define SIZE ((FOO+BAR)/8)
int a[SIZE * 2];

(5)妥協できるところ
・構文解析が成功するかどうかは正確でなくても良い。別のコンパイラで、コンパイルが通ることを確認したソースのみをターゲットにする。
・int a[SIZE * 2]; であれば、展開後の値と"SIZE * 2"という文字列で定義されている、という2つの情報があればよい。
・最初は、配列の大きさだけが元の文字列との対応が取れていれば良い。当面これ以外では使わない。

(6)今気がついたこと
・SIZEが5の時SIZE * 2が10になる、という情報は構文解析だけじゃ駄目。次のステップが必要。教科書に戻らないといけない。
・[]の中は配列の大きさを与える文字列、として処理すればあっさり終わる気がする。実際、今までのツールがそうやって処理していた。その文字列に対して、toInt()とかgetSize()があればよい。(4)の極端な例は対応しない。

整理したらすっきりしましたよ。

|

« 今日の日記 | Main | Verilog2005 の Compiler directives »

Comments

Posted by: free bci background check ohio | 2015.08.28 at 10:00 AM

Posted by: free criminal background check nc online | 2015.09.04 at 03:06 AM

Posted by: free background check no payment | 2015.09.08 at 02:49 PM

10 for getting these complimentary trials.

Posted by: free credit report and score no credit card | 2015.10.02 at 09:23 PM

10 for getting these complimentary trials.

Posted by: free credit report online | 2015.10.07 at 11:29 PM

Posted by: free background check mn | 2015.10.10 at 04:09 PM

10 for acquiring these totally free trials.

Posted by: free credit report government issued | 2015.10.13 at 06:27 AM

10 for obtaining these free trials.

Posted by: free credit report gov | 2015.10.17 at 08:07 AM

10 for obtaining these cost-free tests.

Posted by: free credit report transunion | 2015.10.20 at 04:24 PM

Posted by: free background check parents | 2015.10.23 at 11:10 AM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/41405244

Listed below are links to weblogs that reference プリプロセッサと字句解析と構文解析と:

« 今日の日記 | Main | Verilog2005 の Compiler directives »