[问题] 参数的Parser如何撰写呢?

楼主: cjoe (TeA)   2015-06-21 02:02:48
假设我今天要抓取一个指令所下的的参数,指令如下
function1('20150621','摘要','这篇研究...略','cjoe');
我本来是用很简单的方法来撷取这串指令的参数,基本上就是用‘,’当切割点,
得到的结果如下(实作上的细节有部份已经略掉):
20150621
摘要
这篇研究...略
cjoe
但是我今天遇到像 '这篇,,,研究...略',使用‘,’当切割点马上就会变不可行
我本来想用‘','’当切割点,但是我想如果刚好又遇到有参数刚好是‘','’
这样一定马上就又出错了,'我故意要搞怪\',\''
目前我先使用 ',' 来当切割点 ,以我的CASE来说,
可能已经不太会发生错误了,但是毕竟这样的方式,只是徒增程式不可靠性而已...
因此我有点好奇,程式语言是如何parse这些参数的呢?
我该怎么正确的去parse我要的资料呢?
作者: Killercat (杀人猫™)   2015-06-21 02:12:00
参数不是资料,本来就有局限性,其实不用管太多GNU linux commands本来就不是什么都吃
楼主: cjoe (TeA)   2015-06-21 02:26:00
感谢 我现在想想 好像用 ',' 切就可以了 @_@参数中'都会变成\' ,我用','来切,\',\' 本来就不会去切到
作者: ssccg (23)   2015-06-21 02:35:00
如果参数 '和, 中间有空白呢?从头parse过去遇到没跳脱的 ' 就切换状态就是了string用了 ' 包起来不就是为了分隔?
作者: Killercat (杀人猫™)   2015-06-21 09:06:00
他就是想说“我资料要是就是想要有'或者“\'”怎么办”诶,我倒是想到了,GNU Command里面这种资料来源用两种方法吃 : 1. stdin 2. 强制放最尾巴的参数这跟grep/sed似乎是有点像
作者: MonyemLi (life)   2015-06-21 11:33:00
其实就类似csv parser,一个字一个字读
作者: bitlife (BIT一生)   2015-06-21 17:30:00
lexical analysis需要使用有限状态机,详见compiler书籍
楼主: cjoe (TeA)   2015-06-21 20:01:00
感谢各位的回答!
作者: qrtt1 (有些事,有时候。。。)   2015-06-21 21:32:00
切出来字段不对,就喷 error 靠北使用者,请他修改资料 ^^
作者: eieio (好多目标)   2015-06-23 04:45:00
用 Guava Splitter 吧

Links booklink

Contact Us: admin [ a t ] ucptt.com