2012-06-28 74 views
2

我想用JavaScript解析文本。我想解析的語法是一種標記語言。這種語言有兩個主要類型的標記:我有一個解析器,我想學習正確的解析

$f56 

意味着以下字符會出現色彩#F56的。直到下面的$用3個十六進制char它使用這種顏色。

$i 

意味着直到下列$z(結束標記)文本是斜體。他們是另一個字母 的標籤。

因此,基本上這種語言是由3個字符長的六色標籤和一個字母長的標籤組成。

我可以製作一些醜陋的東西來解析我的文本,存儲字符位置和標籤的當前狀態(格式和顏色),但我想學習正確的解析。你能否給我一些提示/原則來爲這種語言做一個乾淨的分析器?

+1

解析是很有趣的,它涉及到來自計算科學核心的想法。這是一個很大的課題。 – Pointy

回答

2

如果你知道antlr你可能會在探索http://www.antlr.org/wiki/display/ANTLR3/ANTLR3JavaScriptTarget,如果你設定的目標語言,它生成JavaScript詞法分析器和解析器

被intrested如JavaScript

語法的Tg

grammar T; 
options { 
    language=JavaScript; 
    [other options] 
} 
... 
... 

parser.html

<script type="text/javascript" src="lib/antlr3-all-min.js"></script> 
<script type="text/javascript" src="TLexer.js"></script> 
<script type="text/javascript" src="TParser.js"></script> 
<script type="text/javascript" src="TWalker.js"></script> 

<script type="text/javascript"> 
var input = "...what you want to feed into the parser...", 
    cstream = new org.antlr.runtime.ANTLRStringStream(input), 
    lexer = new TLexer(cstream), 
    tstream = new org.antlr.runtime.CommonTokenStream(lexer), 
    parser = new TParser(tstream), 
    r = parser.entry_rule(); 

var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree()); 
nodes.setTokenStream(tstream); 
var walker = new TWalker(nodes); 
walker.tree_entry_rule(); 
</script> 
0

如果你真的想了解解析,拿起這本書:Compilers: Principles, Techniques, and Tools又名龍書。它非常密集,但提供了最全面的解析。

我聽說過關於ANTLR的好東西(如上所述),但還沒有使用它。儘管我已經使用了Bison,這對我定義語法非常有效。