回答
Ragel希望有一些變量處於範圍之內,並指向正在掃描的緩衝區的各個重要部分。你可以找出它期望它們被調用的方式,以及如何在Ragel User Guide中更改它們。第5節,主機程序界面,在這裏是你的朋友。
從運行在所述第一參數中的掃描器手動一個例子:
#include <stdio.h>
#include <string.h>
%%{
machine foo;
write data;
}%%
int main(int argc, char **argv)
{
int cs;
if (argc > 1) {
char *p = argv[1];
char *pe = p + strlen(p);
%%{
main := [0-9]+ ('.' [0-9]+)?;
write init;
write exec;
}%%
}
printf("result = %i\n", cs >= foo_first_final);
return 0;
}
基本上cs
分別持有的機器的緩衝器的狀態和p
和pe
點到開始和結束。
從手動的定義:
•CS - 當前狀態。這必須是一個整數,並且當數據分解爲獨立處理的塊時,它應該持續存在於機器的調用中。這個變量 可以從執行循環外部修改,但不能從內部修改。
•p - 數據指針。在C/D代碼中,這個變量應該是一個指向要處理的字符數據 的指針。它應該在機器的每次運行中初始化爲數據塊的開始。在Go中,Java和Ruby用作數據的oset,並且必須是整數。在 這種情況下,它應該在機器的每次運行中初始化爲零。
•pe - 數據結束指針。這應該被初始化爲p加上機器每次運行的數據長度。在Go中,Java和Ruby代碼應該初始化爲數據長度。
•eof - 文件結束指針。當正在處理的buer塊是最後一個 時,應將其設置爲pe,否則應將其設置爲null。在Go中,Java和Ruby代碼-1必須使用 而不是null。如果EOF事件只有在處理完最終塊塊 之後才能知道,那麼可以設置p = pe = eof並運行執行塊。
•data - 此變量僅在Go,Java和Ruby代碼中需要。它必須是包含要處理的數據的數組 。
•stack - 這必須是一個整數數組。它用於存儲代表 狀態的整數值。如果堆棧必須動態調整大小,Pre-push和Post-Pop語句可以使用 (5.6和5.7節)。
•top - 這必須是一個整數值,並將用作堆棧的oset,從而在堆棧頂部提供下一個 可用點。
•act - 這必須是一個整數值。它是一個有時用於掃描程序代碼的變量,用於保持 跟蹤最近成功的模式匹配。
•ts - 這必須是一個指向字符數據的指針。在Go中,Java和Ruby代碼必須是 整數。有關更多信息,請參見第6.3節。
- 1. 如何從.web文件中提取可讀的源代碼?
- 2. 從源代碼讀取pkgversion
- 3. 如何從文本文件中讀取VB格式的代碼?
- 4. 從c代碼中的文件中讀取一行代碼
- 5. 如何從內核源代碼中提取x86相關文件?
- 6. 如何從war文件中獲取java源代碼?
- 7. 如何從dll文件中提取源代碼?
- 8. 如何從Mac上的* .jar文件中提取源代碼?
- 9. 如何優化這個從xml文件中讀取的代碼
- 10. 如何從AS/MXML代碼中的AIR清單文件讀取
- 11. 如何從Duktape中運行的JavaScript代碼讀取文件?
- 12. 如何更改我的c#代碼以從文件中讀取?
- 13. 從sdcard讀取文件的Android源代碼錯誤
- 14. 如何從asp代碼中讀取AspMaxRequestEntity
- 15. 如何在eclipse中從資源文件夾讀取文件
- 16. 從資源中讀取文本文件
- 17. 我如何使php源代碼(c代碼)從php.ini中讀取數組?
- 18. Java:如何從文件讀取密碼?
- 19. 如何讀取崩潰轉儲文件(我有源代碼和.pdb文件)
- 20. 如何從GitWeb獲取文件的源代碼?
- 21. 如何從發佈網站獲取ASPX文件的源代碼?
- 22. 如何從.ipa文件獲取源代碼?
- 23. 如何從Ada exe文件獲取源代碼?
- 24. 如何從縮小的JavaScript文件獲取源代碼?
- 25. NUnit從源文件讀取文件Bin
- 26. 從App_data文件夾中讀取文件的代碼優化
- 27. 從源代碼目錄中讀取靜態資源
- 28. 如何從互聯網資源中讀取文本文件?
- 29. 如何從.pyo文件恢復源代碼python代碼(.py)?
- 30. 從資源中讀取xml文件
Thankx for you good help – whisper 2013-05-09 01:35:29